如何在php父类中使用单例和静态后期绑定toghter

时间:2017-04-10 08:06:56

标签: 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::$_instance)){
        self::$_instance = new static();
    }
    return self::$_instance;
}

UserModel和UserThirdModel实现CommonModel

我创作的时候  $ user = UserModel :: instance(); //创建用户实例

$ userThird = UserThirdModel :: instance(); // userModel retured。

我发现问题来自"if(!isset(self::$_instance)){" 我的问题是如何根据不同的模型创建不同的实例

由于

1 个答案:

答案 0 :(得分:1)

您可以使用$_instance http://php.net/manual/en/function.get-called-class.php

按类名将get_called_class()转换为实例数组

首先改变

protected static  $_instance = array(); //singleton array

然后使用self::$_instance[get_called_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()];
}