PHP:检测同一类的实例

时间:2012-01-06 14:50:08

标签: php oop

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

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

2 个答案:

答案 0 :(得分:4)

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

像...这样的东西。

class Foo {
    private static $usedValues = array();

    public function __construct($val) {
        if(in_array($val, self::$usedValues)) {
            throw new Exception('blah');
        }

        self::$usedValues[] = $val;
    }
}

答案 1 :(得分:2)

我认为multiton模式适合你。

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