2019-03-18 13:29:54 1736次浏览 4条回答 0 悬赏 10 金钱

别人项目里面看的,
没法理解。第一次见这样的

麻烦大佬解说下,谢谢

self::$instance instanceof self

不知道这个条件是啥意思。

new self(); 构造函数也没这个,这new的是啥意思呢

意思是把 构造函数直接赋给self::$instance吗

1.png

最佳答案

  • 灰太狼 发布于 2019-03-18 14:40 举报

    这个是单例。

    self::$instance 类似 $this->instance 只是定义的instance不同。

    new self();创建一个对象。new是创建的意思

    public static function init(){
      if(self::$instance instanceof self){  //instanceof是运算符 判断 左边的对象是否是右边的实例
        return false
      }
      self::$instance = new self();  //如果不是不是就创建一个实例
    }
    
    1 条回复
    回复于 2019-03-18 16:27 回复

    感谢大佬回复,相对其他大佬的看起来易于理解,非常感谢

  • 回答于 2019-03-18 14:06 举报

    这是php基础啊,这个应该去php.net看手册才行。首先,self是啥?大概范围应该是面向对象这部分,那就找吧:

    http://php.net/manual/zh/language.oop5.basic.php

    在这一页找到了这句话:
    在类定义内部,可以用 new self 和 new parent 创建新对象。
    所以,new self() 在哪个类中,就是实例化那个类,这种实例化方式比较通用。看你上面的代码就是实例File类。
    那么self::$instance想必也好理解了,看这里:

    http://php.net/manual/zh/language.oop5.properties.php

    这一页有这么一句话:
    静态属性则是用 ::(双冒号):self::$property 来访问。更多静态属性与非静态属性的区别参见 Static 关键字。

    instanceof 是啥意思呢?我觉得应该去操作符相关里面找找,留给你吧。
    总结下,哪些是yii2的知识,你就去网站的文档,api这些里去找;如果是php基础的,那自然去php手册里呗。
    好好理解下。

    1 条回复
    回复于 2019-03-18 16:26 回复

    感谢大佬回复,意思是用了这函数,调用这类可以静态调用,又能$this调用嘛

  • 回答于 2019-03-18 14:07 举报

    你clone一下就知道是啥意思了

  • 回答于 2019-03-18 14:47 举报

    了解下PHP设计模式-单例模式

    1 条回复
    回复于 2019-03-18 16:32 回复

    好的,谢谢,
    简单的so了一下,大意就是减少new造成资源消耗。

    那和静态方法调用的有啥分别吗

    好象有点明白了,

    这个单例模式可以这样调,

    $cc = Demo::getInstance();//实例化
    $cc->demo();//其他方法
    
    觉得很赞
您需要登录后才可以回答。登录 | 立即注册
yzg91
主管

yzg91

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

热门问题