2011-10-17 39 views
0

我必須檢查,如果一個類已經初始化(如果我已經完成:$a = new MyClass;)。我如何使用PHP來做到這一點?如何獲得一個類的實例?

謝謝。

+2

你的意思是一個類是否已經在某處使用?不確定這是否可能。你想做什麼,你最終的目標是什麼? –

回答

6

一種方式做到這一點是讓類本身保持其所有實例的軌跡:

class MyClass { 

    protected static $instances = array(); 

    public function __construct() { 
     self::$instances[] = $this; 
    } 

    public static function countInstances() { 
     return count(self::$instances); 
    } 

} 

echo MyClass::countInstances(); 

(小心銷燬實例時減少計數/參考, yadayada ...)

你也許只是想更好地跟蹤你的變量,所以你不必在以後找出它,這取決於你的目標是什麼。

2

使用

if ($a instanceof MyClass) ... 
1

這一切有點取決於爲什麼你真的需要這個,但實現這個最糟糕的方式之一將是使用單身。別。 (好..有一個全球$a會更加可怕)

而是通過使用創建MyClass的實例的工廠類重新創建相同的效果。基本上你第一次做的是將創建的實例存儲到工廠的私有/受保護變量中,並將其返回。下一次你檢查工廠裏是否已經有儲值。