2012-04-05 5 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を参照) –

+0

HTTP ://us2.php.net/manual/en/function.class-exists.php – j08691

+0

@ j08691 class_exist()は、オブジェクトが存在するかどうかを確認したいので、このケースを助けてくれません。クラスはありません。 – Rahul

答えて

7

グローバルを使用するこれを実現する方法です。これを行うための一般的な方法シングルトンインスタンスです:

$WF = WidgetFactory::getInstance(); 

WidgetFactoryのコンストラクタ:

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をチェックするのは、このようなインスタンスを取得することができますインスタンスがWidgetFactoryによってのみ作成されることを保証するためにprotectedと宣言されています。

5

これは、ジョブを実行する必要があります。

if (($obj instanceof MyClass) != true) { 
    $obj = new MyClass(); 
} 
関連する問題