我在使用 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。我知道我是否将它们以菊花链形式连接起来,即__construct
B 调用C::get
或者D::get
它可以工作,但这对我的目的来说不是最佳的。这是因为它们在同一范围内吗?如果是这样,有没有办法解决这个问题?我问这个更多的是出于好奇而不是实际目的——我知道我可以很容易地在它们中的每一个中实现单例模式。那么,有什么想法吗?谢谢!
PS 请不要有“单身人士是邪恶的,你应该在地狱中燃烧”的评论。我非常清楚这一点。