訪問類變量替代語法我只是在一個PHP腳本在一個有趣的語法,迷迷糊糊:在PHP
echo $foo->{'bar'};
在這種情況下,$ foo是一個對象從PHP的json_decode()函數返回的,但它的工作原理以及訪問任何對象的公共成員時。
我試圖找出爲什麼使用而不是更常見的語法:
echo $foo->bar;
是否訪問類成員與第一例子語法提供什麼特別的,相比於第二個例子?
訪問類變量替代語法我只是在一個PHP腳本在一個有趣的語法,迷迷糊糊:在PHP
echo $foo->{'bar'};
在這種情況下,$ foo是一個對象從PHP的json_decode()函數返回的,但它的工作原理以及訪問任何對象的公共成員時。
我試圖找出爲什麼使用而不是更常見的語法:
echo $foo->bar;
是否訪問類成員與第一例子語法提供什麼特別的,相比於第二個例子?
的大括號語法是有用:
print $foo->{'aMemberFunc'}();
當要訪問構件,其名稱是由另一功能(或可變)提供。
這裏getVarName()
返回一個字符串,可以用來引用$ foo對象中的成員。
print $foo->{getVarName()};
沒有大括號這將是$foo->getVarName()
,它會嘗試和運行方法......它採用了一種完全不同的意義大括號。
echo $foo->{'bar'};
和echo $foo->bar;
是一樣的,據我所知。
第一種語法允許您使用常用於JSON中的' - '來訪問屬性。當要引用的函數名作爲字符串
好處是您可以擁有不遵守命名成員變量規則的變量名稱。
這看起來似乎是一個壞主意,通常它是有用的。一個例子是如果你正在編寫一個應用程序,允許其用戶添加具有人類可讀名稱的任意字段,但仍然可以訪問插件等。
謝謝盧卡。我接受你的答案,因爲你提供了最徹底的解釋。還要感謝dev-null-dweller指出了這個JSON方面。 – 2010-11-12 13:17:42