2016-11-17 33 views
2

隨意重新標題這個問題,因爲我不知道這樣做的正確名稱。更重要的一點是,當訪問對象內部的屬性時,我看到有人使用{'property'},所以我設置了一個示例來嘗試理解,但是當我使用它時以及不使用時,該屬性是可訪問的?爲什麼在PHP中使用{'property'}

class Example { 
    public $name; 
} 

$e = new Example(); 
$e->{'name'} = 'Kdot'; 

echo $e->name; // output: Kdot 

我已經嘗試更改範圍並通過類方法訪問它,但它同時適用於兩種方式。

有人能幫我理解使用{}分隔符的含義是什麼嗎?因爲從我的知識,如果存儲在另一個變量中的參數,這也將工作:

$property = 'name'; 
echo $e->$property; // output: Kdot 
+0

許多方法可以做同樣的事情。就像在JS中一樣,你可以通過'window''onload'],'window.onload'和'var name = onload;窗口[name]' –

+0

這只是最佳做法嗎? @JuanMendes – KDOT

+0

請參閱http://stackoverflow.com/questions/11940244/how-to-access-an-object-property-with-a-minus-sign –

回答

2

他們大多都只是不同的方式做同樣的事情,但略有不同的能力。

一個區別是,如果你想直列串聯,並用這些屬性名稱,則需要大括號:

// example: 
$property = 'foo'; 

echo $e->{$property . 'Suffix'}; // good, uses $e->fooSuffix 
echo $e->$property . 'Suffix' // bad, uses $e->foo and adds "Suffix" literal 

除了是,直接訪問屬性名稱必須符合一定的規則。例如if you have a dash in your property name您需要使用大括號才能訪問它。

+0

不錯,我正在努力想要一個例子,你需要'obj - > $ {}' –

+0

謝謝,這可能是因爲我一直在使用單詞prefix和分隔符來搜索,我還沒有找到這個信息。我很欣賞這一點,並可能從現在開始使用大括號。 – KDOT

+0

其實,我想它可能更適用於動態方法名稱,而不是屬性......只是一個例子雖然:) –

相關問題