PHP:检测同一类的实例


PHP: Detect instances of same class

我有一个PHP类,它的构造函数中需要一个唯一的值。如果同一类的多个实例被传递相同的值,结果将非常可怕。

我该如何检测类的其他实例,以便在构造任何新实例之前检查并防止这种情况发生?

一个简单的解决方案是在类中保留一个值的静态数组。然后,在创建新实例时,检查构造函数中静态数组的内容。

类似。。

class Foo {
    private static $usedValues = array();
    public function __construct($val) {
        if(in_array($val, self::$usedValues)) {
            throw new Exception('blah');
        }
        self::$usedValues[] = $val;
    }
}

我认为多吨模式适合您。

class Foo {
    static protected $_instances = array();
    static public function getInstance($id) {
        if(!self::exists($id)) {
            self::$_instances[$id] = new Foo($id);
        }
        return self::$_instances[$id];
    }
    static public function exists($id) {
        return isset(self::$_instances[$id]);
    }
    protected function __construct($id) {
    }
}