我正在處理現有的代碼庫,並找回一個屬性以數字開頭的對象,如果我在對象上調用print_r
,則可以看到該對象。我們假設這是$Beeblebrox->2ndhead
。當我嘗試訪問它時,出現如下錯誤:如何訪問以數字開頭的對象屬性?
Parse error: syntax error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or '{' or '$'
如何獲取該屬性?
我正在處理現有的代碼庫,並找回一個屬性以數字開頭的對象,如果我在對象上調用print_r
,則可以看到該對象。我們假設這是$Beeblebrox->2ndhead
。當我嘗試訪問它時,出現如下錯誤:如何訪問以數字開頭的對象屬性?
Parse error: syntax error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or '{' or '$'
如何獲取該屬性?
這個怎麼樣:
$Beeblebrox->{'2ndhead'}
其實,你可以爲幾乎任何類型的變量,做到這一點 - 即使是那些不屬於類屬性。
例如,您可以考慮包含空格的變量名稱;下面的語法將工作:
${"My test var"} = 10;
echo ${"My test var"};
即使很明顯,你就無法做任何事情是這樣的:
$My test var = 10;
echo $My test var;
不知道它是如何工作的內部,雖然...而經過一番搜索之後,我在PHP手冊中找不到任何關於此的信息。
我唯一能找到{}
和變量是在這裏:Variable parsing - 但不完全與當前主題...
但這裏是一個說明幾個其他possiblities的一篇文章,遠不止我這裏貼的例子更遠:PHP Variable Names: Curly Brace Madness
這裏還有另外一個,給出了有關辦法的一些其它附加信息的解析:PHP grammar notes
是的 - 就是這樣!我可以回答你的問題! :) – 2010-07-13 19:11:47
快10秒^^ – 2010-07-13 19:12:12
如果你想詳細說明爲什麼這個工作和需要(也許你比我知道的更多?),這將使這個網頁更有用和有趣。 – 2010-07-13 19:13:01
我居然發現OU在我問這個問題之前,我從同事那裏得到答案,但在Google上找不到它,所以我想在這裏發佈它,以防其他人遇到同樣的問題。
我可以訪問屬性,像這樣:
$Beeblebrox->{'2ndhead'}
這不是一個真正的法律有以數字開頭的屬性或變量,但不知何故,像這樣的動態參考使其成爲可能。對我來說,這聽起來像是一個奇怪的漏洞。
我知道你在使用現有的代碼,但爲了完整起見,我想補充一點,應該避免使用強制使用大括號語法的變量。 「正常」使用變量名稱更爲人所知,且易於閱讀。 – 2010-07-13 20:24:00
我只是[回答](http://stackoverflow.com/a/10333200/50079)一個類似的問題;如果您遇到的問題屬於**所有數字**,那麼您會在那裏找到解決方案。 – Jon 2012-04-26 13:08:53