如何在php父类中使用单例和静态后期绑定
我正在尝试创建一个父类,如:如何在php父类中使用单例和静态后期绑定,php,static,singleton,Php,Static,Singleton,我正在尝试创建一个父类,如: class CommonModel extends \Common\Model\CommonModel { protected static $_instance = null; //singleton /** * singleton * @return null|static * @Date 2017/4/7 14:06 */ public static function instance(){ if(!isset(self::$_instan
class CommonModel extends \Common\Model\CommonModel {
protected static $_instance = null; //singleton
/**
* singleton
* @return null|static
* @Date 2017/4/7 14:06
*/
public static function instance(){
if(!isset(self::$_instance)){
self::$_instance = new static();
}
return self::$_instance;
}
UserModel和UserThirdModel实现CommonModel
当我创建
$user=UserModel::instance()//将创建一个用户实例
$userThird=UserThirdModel::instance();//用户模型返回
我发现问题来自于“if(!isset(self:$\u instance)){”
我的问题是如何根据不同的模型创建不同的实例
谢谢您可以使用
get\u called\u class()
第一次改变
protected static $_instance = array(); //singleton array
然后使用self::$\u实例[get\u called\u class()]
例如
public static function instance(){
if(!isset(self::$_instance[get_called_class()])){
self::$_instance[get_called_class()] = new static();
}
return self::$_instance[get_called_class()];
}
我还有一些问题!当我把'function test(){echo CLASS;}'放在commonClass中时。$a=new classA()//classA扩展了commonClass;当$a->test();//结果是“commonClass”为什么?它应该是“classA”,我认为,因为调用的是对象函数,而不是静态函数;
\uuuuuu CLASS\uuuuuu
将打印与其所在代码行相关的类名称,get\u called\u CLASS()
将在运行时解析该类并解析任何类扩展。