2014-01-25 83 views
1

我此刻学习PHP和the tutorial注意到一个奇怪的事实:面向对象的PHP:为什么“这个”关键字是一个变量?

注:$this是一个特殊的变量不能进行分配。

不能被分配给已被实现为恒定,而不是一个可变 Doesen't对象?

为什么这样做?

+2

它*是*变量,'$ this'总是指向不同的对象。他们本可以像'__FILE__'那样使它成为一个* magic *常量,但他们没有。呃,那是PHP。这在许多语言中都是一样的,其他人使用'self',这与'foo'等其他变量无法区分......没有*可以以某种方式实现,语言设计人员可以做任何他们想做的事情。 – deceze

回答

1

The scope of a constant is global。相比之下,$this在整个应用程序中都会发生变化,因为它取决于上下文(即类)。

考虑这个短的例子:

class A { 
     function printThis() { echo $this; } 
    } 

    class B { 
     function printThis() { echo $this; } 
    } 

显然,在$thisclass Bclass A$this不同,因此通过定义它不能是一个常数*。

*)编辑:然而,在PHP中存在该变化取决于上下文magic constants

<?php 
$line1 = __LINE__; 
$line2 = __LINE__; 
assert($line1 == $line2); // fails 

所以我觉得用户deceze summarized it pretty well in the comments: “咩,这是PHP

相关问题