2013-05-09 83 views
1

PHP中的$ this和self有什么不同?

虽然我读static keywordphp.net,我对以下句子感到困惑。

$这在声明为static的方法内不可用。

为什么$这样做不可用?

任何帮助将不胜感激!

谢谢!

+0

你也可以检查[这个答案](http://stackoverflow.com/questions/1948315/wheres-the-difference-between-self-and-this-in-a-php-class-or-php-方法) – MISJHA 2013-05-09 04:14:59

+0

看看这个链接http://php.net/manual/en/language.oop5.basic.php – slackmart 2013-05-09 04:22:01

回答

2

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

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

When to use self over $this?

+1

感谢您的回答!您提供的链接非常棒! – user2364801 2013-05-09 05:21:59

0

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

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

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

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可能意味着两个完全不同的东西。

如果继承和静态属性/方法在起作用,重要的是要知道差异,以我的经验来看,在这些情况下,自我几乎总是错误的,它可能导致一些有趣的错误,只有当多于一个成员类层次结构在给定的时间内发挥作用。