2012-04-05 153 views
3

考慮下面的代碼情景:如何檢查一個類的對象是否已經存在於PHP中?

<?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

這是一個 '單':http://php.net/manual/en/language.oop5.patterns.php(見例如#2) – 2012-04-05 21:16:50

+0

HTTP ://us2.php.net/manual/en/function.class-exists.php – j08691 2012-04-05 21:17:24

+0

@ j08691我想class_exist()不會幫助這種情況,因爲我想檢查是否存在對象而不是類 – Rahul 2012-04-05 21:20:53

回答

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(); 

WidgetFactory構造被宣佈爲protected以確保實例只能由WidgetFactory本身創建。

5

這應該做的工作:

if (($obj instanceof MyClass) != true) { 
    $obj = new MyClass(); 
} 
相關問題