我在想,$this->name
和$this->$name
之间有什么区别? $this
也必须严格命名为这个或者它可以是任何东西?
12
A
回答
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是一个数组 访问。
2
更新后弹出此问题。我喜欢这个问题,所以我想我会添加自己的差异例子。
class Test
{
public $bar = 'bar';
public $foo = 'foo';
public function __construct()
{
$bar = 'foo';
$this->bar; // bar
$this->$bar; // foo
}
}
相关问题
- 1. <xsl:copy>和<xsl:element name =“{name()}”>之间是否有区别?
- 2. 使用./configure(php)--disable- [name]和--without- [name]之间有什么区别?
- 3. .getAttribute(“name”)和.name之间有什么区别?
- 4. “Exchange Legacy Distinguished Name”和“Active Directory Distingushed Name”之间有什么区别?
- 5. $ name和$$ name有什么区别?
- 6. Vue.js中{{name}}和{{{name}}}之间的区别是什么
- 7. 编写`:name =>“String”`和`name:“String”`有什么区别?
- 8. Dynamics CRM中Entity.GetAttributeValue <T>(name)和Entity [name]之间的区别是什么?
- 9. prototype [name]和prototype.name有什么区别?
- 10. localName()和name()。localName()之间有什么区别?
- 11. WPF:'Name'和'x:Name'有什么区别?
- 12. Info.plist和[app name] -Info.plist有什么区别?
- 13. Name和x:Name有什么区别?
- 14. Name和CanonicalName有什么区别?
- 15. Angular2 Form输入中的#name和[(ngModel)] =“name”有什么区别?
- 16. colnames(x [1])< - “name”和colnames(x)[1] < - “name”之间的区别是什么?
- 17. <class name>之间的区别。 <var name>和自我。 <var name>在python类
- 18. $ this-> render()和$ this-> redirect()之间的区别是什么
- 19. $ this-> requestElement()和$ this-> element()之间的区别是什么?
- 20. std :: string name和std :: string&name之间的C++区别
- 21. getExtras(name).getString和getIntent()。getStringExtra(name)之间的区别
- 22. loadClass(String name)和loadClass(String name,boolean resolve)之间的区别
- 23. name和tmp_name之间的区别是什么
- 24. // * [local-name()='element']和// *:element?之间的区别是什么?
- 25. {Server Name} localhost与。\ SqlExpress之间有什么区别
- 26. “%>”和“ - %>”之间有什么区别?
- 27. “this”,“$ this”和“$(this)”之间的区别是什么?
- 28. $ this - > {$ spec}和$ this - > $ spec有什么区别?
- 29. 在面向对象的php类中,$ this-> name = $ name是什么意思?
- 30. 与Jboss.xml中的<jndi-name>和<local-jndi-name>有什么不同?
您的语法错误。用双引号混合单引号是我们? (试图修复它,你覆盖了我) – 2010-02-05 05:26:17
@查哈:呃,再次,早上太早^^谢谢你注意到:-) - 呵呵,我们都编辑了我的答案来纠正这个问题,我看到了:-D ;;我们也在同一时间编辑了我们的评论:-D – 2010-02-05 05:28:23
如果我们编程,我们会被击沉,因为StackOverflow没有注释检出/锁:) – 2010-02-05 05:30:32