在PHP

2010-11-12 54 views
2

訪問類變量替代語法我只是在一個PHP腳本在一個有趣的語法,迷迷糊糊:在PHP

echo $foo->{'bar'}; 

在這種情況下,$ foo是一個對象從PHP的json_decode()函數返回的,但它的工作原理以及訪問任何對象的公共成員時。

我試圖找出爲什麼使用而不是更常見的語法:

echo $foo->bar; 

是否訪問類成員與第一例子語法提供什麼特別的,相比於第二個例子?

回答

4

的大括號語法是有用:

print $foo->{'aMemberFunc'}(); 

當要訪問構件,其名稱是由另一功能(或可變)提供。

這裏getVarName()返回一個字符串,可以用來引用$ foo對象中的成員。

print $foo->{getVarName()}; 

沒有大括號這將是$foo->getVarName(),它會嘗試和運行方法......它採用了一種完全不同的意義大括號。

echo $foo->{'bar'};echo $foo->bar;是一樣的,據我所知。

+0

謝謝盧卡。我接受你的答案,因爲你提供了最徹底的解釋。還要感謝dev-null-dweller指出了這個JSON方面。 – 2010-11-12 13:17:42

1

第一種語法允許您使用常用於JSON中的' - '來訪問屬性。當要引用的函數名作爲字符串

0

好處是您可以擁有不遵守命名成員變量規則的變量名稱。

這看起來似乎是一個壞主意,通常它是有用的。一個例子是如果你正在編寫一個應用程序,允許其用戶添加具有人類可讀名稱的任意字段,但仍然可以訪問插件等。