0

我有下面的 Register 类来创建一个实例并将其保存到数组中。

// The register class
class Register {

    private static $objects = array();
    private function __construct() {}

    private function __clone() {}

    public static function Singleton($class) {
        if (in_array($class, self::$objects)) {
            return self::$objects[$class];
        }
        return self::$objects[$class] = new $class();
        }
}

// Example
class examp {
    public static function Singleton() {
        return Register::Singleton(get_class());
    }

    public function message() {
        echo "Hello";
    }
}

$var = examp::Singleton();
$var2 = examp::Singleton();

// I'm using that way to make sure, but tell me false
if($var === $var2){
   echo "Yes";
} else {
   echo "No";
}

当我确定 $var 是否获得相同的 $var2 实例时,告诉我是否为假。
我想知道为什么 $var 和 $var2 没有得到相同的实例,我的 Register 类有什么问题?

4

1 回答 1

0

你检查是否有一个值,但你应该检查 key。

您不应该使用in_array()函数,而是使用array_key_exists()

来自PHP手册:

  • in_array — 检查一个值是否存在于数组中

  • array_key_exists — 检查给定的键或索引是否存在于数组中

改变

if (in_array($class, self::$objects)) {

 if (array_key_exists($class, self::$objects)) {

工作演示

于 2013-06-04T11:48:02.557 回答