- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
开门见山:我有两个单例类,它们都从父类(super class)继承了它们的单例性质。我在第一个单例上初始化了一些属性,然后让第二个单例检索第一个单例的 the 实例。然而,那个实例似乎不是我首先初始化的实例。一些示例代码可能有助于解释这一点:
首先,父类(super class),提供单例特性(需要 PHP 5.3 或更高版本):
class Singleton {
protected static $instance;
protected function __construct() { }
final private function __clone() { }
public static function getInstance() {
if (!(static::$instance instanceof static)) {
static::$instance = new static();
}
return static::$instance;
}
}
然后我们得到了第一个带有值的单例:
require_once('Singleton.php');
class SingletonA extends Singleton {
protected $value;
public function SingletonA() {
$this->value = false;
}
public function getValue() {
return $this->value;
}
public function setValue($value) {
$this->value = $value;
}
}
然后是引用第一个单例的第二个单例:
require_once('Singleton.php');
require_once('SingletonA.php');
class SingletonB extends Singleton {
public function getValue() {
return SingletonA::getInstance()->getValue();
}
}
现在进行显示失败原因的测试:
require_once('SingletonA.php');
require_once('SingletonB.php');
SingletonA::getInstance()->setValue(true);
echo (SingletonA::getInstance()->getValue()) ? "true\n" : "false\n";
echo (SingletonB::getInstance()->getValue()) ? "true\n" : "false\n";
测试产生以下输出:
true
false
很明显,测试代码引用的 SingletonA 实例与 SingletonB 实例引用的实例不同。简而言之,SingletonA 并不像我需要的那样单一。这怎么可能?我可以使用什么魔法来纠正这种行为,让我成为一个真正的单例?
最佳答案
尝试使用 isset
而不是 instanceof
:
class Singleton {
protected static $instances;
protected function __construct() { }
final private function __clone() { }
public static function getInstance() {
$class = get_called_class();
if (!isset(self::$instances[$class])) {
self::$instances[$class] = new $class;
}
return self::$instances[$class];
}
}
关于php - 在 PHP 5.3 中创建单例基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3972628/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!