PHP单例模式
大家讲道理
大家讲道理 2017-04-10 15:33:23
[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)
迷茫

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

伊谢尔伦

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

伊谢尔伦

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号