创建实例时,我的单例方法出错。我只想要一个实例

时间:2013-06-04 11:40:34

标签: php singleton instance

我在下面有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的相同实例时,请告诉我false或no 我想知道为什么$ var和$ var2没有得到相同的实例,我的Register类中的问题是什么?

1 个答案:

答案 0 :(得分:0)

您检查是否有值但是应该检查密钥。

您不应使用in_array()函数使用array_key_exists()代替。

来自 PHP 手册:

变化

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

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

Working demo