如何获取类的实例?

时间:2011-10-17 07:42:02

标签: php

我必须检查一个类是否已经初始化(如果我已经完成了:$a = new MyClass;)。我怎么能用PHP做到这一点?

感谢。

3 个答案:

答案 0 :(得分: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 ......)

您可能还想更好地跟踪变量,以便以后不必弄明白,这取决于您的目标是什么。

答案 1 :(得分:2)

使用

if ($a instanceof MyClass) ...

答案 2 :(得分:1)

这一切都取决于你实际需要这个的原因,但实现这一目标的最糟糕的方法之一就是使用单身人士。别。 (好吧......拥有全球$a会更加可怕)

相反,您可以使用创建MyClass实例的工厂类重新创建相同的效果。基本上,您第一次执行的操作是将创建的实例存储到工厂的私有/受保护变量中,然后将其返回。下次检查工厂中是否已存储值。