2010-02-05 82 views
12

我在想,$this->name$this->$name之间有什么区别? $this也必须严格命名为这个或者它可以是任何东西?

回答

20

$this是保留的变量名称,不能用于其他任何内容。它特别指向您当前正在工作的对象。您必须使用$this,因为您不知道将分配哪个变量对象。

$this->name指当前类的变量name

$this->$name指的是类变量什么的$name值。因此

$name = "name"; 
echo $this->$name; // echos the value of $this->name. 

$name = "test"; 
echo $this->$name; // echos the value of $this->test 
6

$这是在PHP中使用指向你正在使用它的类的当前实例中quoting保留名称:

伪变量$this可用 当从 对象上下文中调用方法时。
$this是参考 到调用对象(通常是 对象到该方法所属 但可能另一个目的,如果 方法是从第二个对象的 内静态调用)。


使用$this->name,您使用的名称当前对象的name访问属性。这意味着你将访问哪些名字包含在$name局部变量的性质 -


当使用$this->$name,$名称访问属性之前确定。

例如,对于代码的这一部分:

$name = 'abc'; 
echo $this->$name; 

你会真正呼应了美国广播公司财产的内容,如果你这样写:

echo $this->abc; 

做这件事时,你使用variable variables(引用)

类属性可以由也可以使用变量属性名称访问 。
可变属性名称将在 调用的范围内解决,解析为 。
举例来说,如果你有 这样的表达式$foo->$bar, 然后局部范围将是$bar检查 ,其价值将被用作 的$foo属性的名称。
这个 也是如果$ bar是一个数组 访问。

+0

您的语法错误。用双引号混合单引号是我们? (试图修复它,你覆盖了我) – 2010-02-05 05:26:17

+0

@查哈:呃,再次,早上太早^^谢谢你注意到:-) - 呵呵,我们都编辑了我的答案来纠正这个问题,我看到了:-D ;;我们也在同一时间编辑了我们的评论:-D – 2010-02-05 05:28:23

+0

如果我们编程,我们会被击沉,因为StackOverflow没有注释检出/锁:) – 2010-02-05 05:30:32

2

更新后弹出此问题。我喜欢这个问题,所以我想我会添加自己的差异例子。

class Test 
{ 
    public $bar = 'bar'; 
    public $foo = 'foo'; 

    public function __construct() 
    { 
     $bar = 'foo'; 

     $this->bar; // bar 
     $this->$bar; // foo 
    } 
} 
相关问题