- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在 PHP 继承方面遇到了一些问题。这是交易:
我有这个基类,Singleton:
namespace My_Namespace;
abstract class Singleton {
protected static $instance = null;
static function get() {
if ( null == static::$instance ) {
static::$instance = new static;
}
return static::$instance;
}
private function __construct() {
}
}
我有一堆类继承了那个 Singleton 类,称它们为 A、B、C、D。其中一个看起来像这样:
namespace My_Namespace;
class A extends Singleton {
protected function __construct() {
B::get();
if ( some_condition() ) {
C::get();
}
else {
D::get();
}
}
}
现在,我只需执行 A::get()
即可让它全部滚动。正如预期的那样,调用了 A 的构造函数。然后,调用 B 的构造函数,再次没有问题。现在变得奇怪了。一旦 C::get()
被调用,它就会将 static::$instance
识别为已经是类 B 的对象,并且根本不会实例化 C。我知道如果我有点菊花链它们,那就是 B 调用 C::get
或 D::get
的 __construct
它有效,但就是这样不适合我的目的。这是因为它们在同一范围内吗?如果是这样,有什么办法解决这个问题吗?我问这个更多的是出于好奇而不是实际目的——我知道我可以很容易地在它们中的每一个中实现单例模式。那么,有什么想法吗?谢谢!
附言请不要发表“单例是邪恶的,你应该在 hell 中燃烧”的评论。我非常清楚这一点。
最佳答案
请注意,static::$instance = new static
调用(在您的情况下)A
的构造函数。
对于您的解决方案,您的子类中的实例需要一个静态属性。
只需添加
protected static $instance = null;
对他们来说,它应该可以正常工作。
关于PHP 单例和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17032480/
我最近购买了《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
我是一名优秀的程序员,十分优秀!