Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何获取类的实例?_Php - Fatal编程技术网

Php 如何获取类的实例?

Php 如何获取类的实例?,php,Php,我必须检查类是否已经初始化(如果我已经初始化:$a=newmyclass;)。如何使用PHP实现这一点 谢谢。使用 if ($a instanceof MyClass) ... 一种方法是让类本身跟踪其所有实例: class MyClass { protected static $instances = array(); public function __construct() { self::$instances[] = $this; }

我必须检查类是否已经初始化(如果我已经初始化:
$a=newmyclass;
)。如何使用PHP实现这一点

谢谢。

使用

if ($a instanceof MyClass) ...

一种方法是让类本身跟踪其所有实例:

class MyClass {

    protected static $instances = array();

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

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

}

echo MyClass::countInstances();
(销毁实例时注意减少计数/引用,yadayada…)


你也可能只是想更好地跟踪你的变量,这样你就不必以后再去弄清楚,这取决于你的目标是什么。

这在某种程度上取决于你为什么真正需要它,但实现这一点最糟糕的方法之一是使用单例。不。(好的..拥有一个全局
$a
会更可怕)


相反,您可以使用一个factory类来创建
MyClass
的实例,从而重新创建相同的效果。基本上,您第一次要做的是将创建的实例存储到工厂的私有/受保护变量中,并返回它。下次检查工厂中是否已经有as存储值。

您的意思是某个类是否已经在某个地方使用?不确定这是否可能。你想做什么,你的最终目标是什么?