PHP单例和继承
发布时间:2020-05-25 09:02:12 所属栏目:PHP 来源:互联网
导读:我在 PHP继承方面遇到了一些麻烦.这是合约: 我有这个基类,Singleton: namespace My_Namespace;abstract class Singleton { protected static $instance = null; static function get() { if ( null == static::$instance
|
我在 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 ::让它起作用,但这对我的目的来说并不是最佳的.这是因为它们属于同一范围吗?如果是这样,有什么方法吗?我问的更多的是好奇而不是实际目的 – 我知道我可以很容易地在每一个中实现单例模式.那么,有什么想法吗?谢谢! 附:请不要’单身人士是邪恶的,你应该在地狱里燃烧’评论.我非常清楚. 请注意,static :: $instance = new static调用(在您的情况下)A的构造函数.使用您的解决方案,您的子类中的实例需要一个静态属性. 只需添加 protected static $instance = null; 对他们来说,它应该工作正常. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
