2019-03-18 17:00:26 1731次浏览 3条回答 0 悬赏 10 金钱

网上找了个完整的

这么个类。美名其曰单例模式 三私一公

目前有点困惑了 这不全是静态方法吗。

直接全部类加冒号就能调用了,

难道就是单例单例 单单一个 getInstance 对外吗

调用里面方法是这样使用吗 类::getInstance->其他方法();

是这么理解嘛,

貌似和下面这样调用。

没啥感觉,没啥区别呀,大佬快来,打醒我

::其他方法1();

::其他方法2();

::其他方法3();

::其他方法4();

class Foobar {
    static private $instance;
    
    // 禁止外部new Foobar
    private function __construct() {
    }
    
    // 禁止clone $foobar
    private function __clone() {
    }
    
    static public function getInstance() {
        retrun self::$instance
            ?: (self::$instance = new self);
    
    
}

单例模式,三私一公,其中的三私:构造方法,克隆魔术方法,实例化对象。一公:对外提供的方法

  • 回答于 2019-03-19 09:25 举报

    类::其他方法1(); 是静态调用,没有实例化类
    单例是,实例后的类给了静态变量,就是在一个功能里,如果多次使用这个类,那就只需要实例化一次类就可以了
    不知道我这么说,有说的明白吗,这也是我个人理解哈

    1 条回复
    回复于 2019-03-19 13:17 回复

    意思是说,一个类里面只能是一种功能吗,

    因为必须调用构造方法,构造方法里面再组合其他方法,所以最终这个类,只能实现一个功能,是这理解嘛

    方法必须以getInstance命名吗,教程里面也是这名字

  • 回答于 2019-03-19 10:52 举报

    静态调用不会触发构造方法和魔术方法, 这个会经常用到的

  • 回答于 2019-03-19 11:30 举报

    单例就是一次生命周期内只会实例化一次类的,每次调用的对象都是同一个对象,比如数据库连接或者一些框架启动阶段实例化的Application对象

    1 条回复
    回复于 2019-03-19 13:14 回复

    今天特意回炉看了下教程,单例模式,我想这yii的db类底层应该就是单例了吧,

    因为看到别人一个项目里面用到单例模式写的,文件读写类,里面就用这模式写的,

    谢谢回复

您需要登录后才可以回答。登录 | 立即注册
yzg91
主管

yzg91

注册时间:2018-11-15
最后登录:2022-05-10
在线时长:22小时13分
  • 粉丝2
  • 金钱479
  • 威望20
  • 积分899

热门问题