脚本宝典收集整理的这篇文章主要介绍了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 ::让它起作用,但这对我的目的来说并不是最佳的.这是因为它们属于同一范围吗?如果是这样,有什么方法吗?我问的更多的是好奇而不是实际目的 – 我知道我可以很容易地在每一个中实现单例模式.那么,有什么想法吗?谢谢!
只需添加
protected static $instance = null;
对他们来说,它应该工作正常.
以上是脚本宝典为你收集整理的PHP单例和继承全部内容,希望文章能够帮你解决PHP单例和继承所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。