PHP单例模式

请问如下代码中$oa = Single::getinstance();这句就相当于实例化吗?为什么可以直接使用Single::getinstance();就可以访问这个类中的方法?谢谢

class Single{

    private $name;
    private function __construct(){

    }

    static public $instance;

    static public function getinstance(){
        if(!self::$instance) self::$instance = new self();
        return self::$instance;
    }

    public function setname($n){
        $this->name = $n;
    }

    public function getname(){
        return $this->name;
    }
}

    $oa = Single::getinstance();
    $ob = Single::getinstance();

    $oa->setname('hello world');
    $ob->setname('good morning');

    echo $oa->getname();
    echo '<br/>';
    echo $ob->getname();
阅读 3.5k
3 个回答

因为 getInstance方法里通过new self()将自身实例化并作为返回值返回。

静态方法getInstance()里面其实写得很清楚,当你静态调用getInstance()时,他会负责去判断是否存在当前对象,如果不存在,会自动帮你创建。if(!self::$instance) self::$instance = new self(); 最后将对象句柄返回给你

用static修饰后的成员属性不归类的实例化对象所有,而是归类本身所有。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题