1

PHP 中的 $this 和 self 有什么区别?

当我在php.net上阅读static 关键字时,我对以下句子感到困惑。

$this 在声明为静态的方法中不可用。

为什么这样做时 $this 不可用?

任何帮助将不胜感激!

谢谢!

4

3 回答 3

2

$this用于调用非静态变量和方法。

self用于调用静态变量和方法。

什么时候使用 self 而不是 $this?

于 2013-05-09T04:13:40.193 回答
0

另一个有趣的方面是,还有一个static可以使用的范围,它引用调用类上下文的类,而不是定义的类上下文。所以代码:

class A {
    public static function createNew(){
       return new self();
    }
}

class B extends A {
}

$test = B::createNew(); // This will actually yield an instance of A

但是如果 A 类被定义为

class A {
    public static function createNew(){
       return new static();
    }
}    

然后$test = B::createNew();会产生一个 B 的实例,如你所料。

这也与静态属性相关,当存在继承时self::$propertystatic::$property可能意味着两个完全不同的事情。

如果继承和静态属性/方法在起作用,那么了解区别很重要,根据我的经验,在这些情况下 self 几乎总是错误的,它可能导致一些有趣的错误,只有当类层次结构中的一个以上成员时才会出现在给定的时间正在发挥作用。

于 2013-05-09T04:47:17.200 回答
0

$this用于访问类的非静态成员函数和成员属性

尽管

self用于访问类的静态成员和静态函数。

使用静态时需要记住的一件事是静态成员只能由静态方法访问,而不能由类的其他成员函数(非静态)访问。

于 2013-05-09T04:19:45.913 回答