为什么使用的::,在使用->不起作用?

warrior_by 发布于 2014/10/23 17:32
阅读 203
收藏 0
php中为什么当一个方法通过范围解析运算符(::)调用的时候,你无法使用$this对象来引用当前对象,应为当前对象不存在,那么问题来了,为什么当前的对象不存在呢?
加载中
0
j
jp029
静态是不生成新对象的,每次调用都是调用同一内存数据, 所以不用new 就可以用::调用方法。但是非静态就需要new一个新的对象,调用其内部方法就需要->。 在语法上这样区分可以让开发人员从直观上了解这些对象的静态/非静态 特性
0
龙上
龙上
因为你没有处新对象啊.赶紧去找个就正常了
0
开源中国董事会主席
开源中国董事会主席

你这分情况。这个不仅仅是 PHP 中这样,java c# 中一样

class A {
    public function fn1(){
      var_dump($this);
    }

    public static function fn2(){
      self::fn1();
    }

    public function fn3(){
      self::fn1();
    }
}

A::fn2(); // 这是没有对象实例,所以方法中不能用$this
$a = new A();
$a->fn3(); // 这是有对象,所以可以用 $this



0
Micooz
Micooz
静态和非静态方法的区别
0
卖萌的程序猿
卖萌的程序猿
你 return 一个对象实例就可以了
0
不是simaguo
不是simaguo
$this代表当前对象而不是类,而用类调用静态方法则没有创建对象,so,$this所指的对象就不存在
返回顶部
顶部