`$ this-> name`和`$ this-> $ name`有什么区别?

时间:2010-02-05 05:19:47

标签: php class

我想知道$this->name$this->$name之间有什么区别? $this也必须严格命名 this 或者它可以是什么?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:6)

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

  

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


使用$this->name时,您正在使用当前对象的名称name访问该属性。


使用$this->$name时,在访问属性之前确定$ name - 这意味着您将访问属性,该名称包含在$name局部变量中。

例如,使用这部分代码:

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

您实际上会回显abc属性的内容,就好像您已经写过:

echo $this->abc;

执行此操作时,您使用的是variable variables (引用)

  

也可以访问类属性   使用变量属性名称。
的   变量属性名称将是   在范围内解决   打电话。
例如,如果你   有一个表达式,如$foo->$bar,   然后将检查本地范围   对于$bar,其值将用作   $foo的属性名称。
这   如果$ bar是一个数组,也是如此   访问。

答案 2 :(得分:2)

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

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

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

        $this->bar; // bar
        $this->$bar; // foo
    }
}