如何在PHP中检查类的对象是否已经存在?

4
考虑以下代码场景:
<?php

//widgetfactory.class.php
// define a class
class WidgetFactory
{
  var $oink = 'moo';
}

?>


<?php

//this is index.php
include_once('widgetfactory.class.php');

// create a new object
//before creating object make sure that it already doesn't exist

if(!isset($WF))
{
$WF = new WidgetFactory();
}

?>

widgetfactory类在widgetfactoryclass.php文件中,我已经将此文件包含在我的index.php文件中,所有网站操作都通过index.php运行,即对于每个操作,该文件都被包含。现在,如果widgetfactory类不存在,我想创建它的对象。我正在使用isset()来实现这一目的,是否有其他更好的替代方法?


这是一个“单例模式”:http://php.net/manual/en/language.oop5.patterns.php(参见示例#2) - Marc B
http://us2.php.net/manual/en/function.class-exists.php - j08691
@j08691 我猜class_exist()对这种情况没有帮助,因为我想检查对象是否存在而不是类。 - Rahul
可能会有帮助:http://php.net/manual/zh/language.oop5.patterns.php - The Alpha
我现在正在寻找几乎完全相同的东西。有没有更近期的方法来实现这个? - Martin
2个回答

7

使用全局变量可能是实现这一目标的一种方法。常用的方式是使用单例模式实例:

class WidgetFactory {
   private static $instance = NULL;

   static public function getInstance()
   {
      if (self::$instance === NULL)
         self::$instance = new WidgetFactory();
      return self::$instance;
   }

   /*
    * Protected CTOR
    */
   protected function __construct()
   {
   }
}

然后,稍后您可以通过以下方式检索实例,而不是检查全局变量$WF

$WF = WidgetFactory::getInstance();
< p > WidgetFactory 的构造函数被声明为 protected,以确保只能由 WidgetFactory 自身创建实例。


5
这应该能完成任务:
if ( ($obj instanceof MyClass) != true ) {
    $obj = new MyClass();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接