我想知道$this->name
和$this->$name
之间有什么区别? $this
也必须严格命名 this 或者它可以是什么?
答案 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
}
}