如何在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()
将在运行时解析该类并解析任何类扩展。