我在想,$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