我在下面有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类中的问题是什么?
答案 0 :(得分:0)
您检查是否有值但是应该检查密钥。
您不应使用in_array()函数使用array_key_exists()代替。
来自 PHP 手册:
in_array - 检查数组中是否存在值
array_key_exists - 检查数组中是否存在给定的键或索引
变化
if (in_array($class, self::$objects)) {
到
if (array_key_exists($class, self::$objects)) {