我有一个PHP类,它的构造函数需要一个唯一的值。如果同一个类的多个实例传递相同的值,则结果可怕。
我如何检测一个类的其他实例,以便在构造任何新类之前检查并防止这种情况发生?
答案 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) {
}
}