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()为此目的使用,还有其他更好的选择吗?

4

2 回答 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();

声明的构造函数WidgetFactoryprotected为了确保实例只能由WidgetFactory它自己创建。

于 2012-04-05T21:18:28.933 回答
5

这应该做的工作:

if ( ($obj instanceof MyClass) != true ) {
    $obj = new MyClass();
}
于 2012-09-11T08:39:51.550 回答