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 の同じインスタンスを取得するかどうかを確認するときは、false または no を教えてください。
$var と $var2 が同じインスタンスを取得しない理由を知りたいのですが、Register クラスの問題は何ですか?

4

1 に答える 1

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)) {

ワーキングデモ

于 2013-06-04T11:48:02.557 に答える