考虑以下代码场景:
<?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()
,还有其他更好的选择吗?
答案 0 :(得分:7)
使用globals 可能是实现此目的的一种方法。执行此操作的常见方法是单例实例:
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();
WidgetFactory
的构造函数声明为protected
,以确保实例只能由WidgetFactory
本身创建。
答案 1 :(得分:5)
这应该做的工作:
if ( ($obj instanceof MyClass) != true ) {
$obj = new MyClass();
}