2010-07-13 98 views
17

我正在處理現有的代碼庫,並找回一個屬性以數字開頭的對象,如果我在對象上調用print_r,則可以看到該對象。我們假設這是$Beeblebrox->2ndhead。當我嘗試訪問它時,出現如下錯誤:如何訪問以數字開頭的對象屬性?

Parse error: syntax error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or '{' or '$'

如何獲取該屬性?

+0

我知道你在使用現有的代碼,但爲了完整起見,我想補充一點,應該避免使用強制使用大括號語法的變量。 「正常」使用變量名稱更爲人所知,且易於閱讀。 – 2010-07-13 20:24:00

+0

我只是[回答](http://stackoverflow.com/a/10333200/50079)一個類似的問題;如果您遇到的問題屬於**所有數字**,那麼您會在那裏找到解決方案。 – Jon 2012-04-26 13:08:53

回答

29

這個怎麼樣:

$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

+0

是的 - 就是這樣!我可以回答你的問題! :) – 2010-07-13 19:11:47

+0

快10秒^^ – 2010-07-13 19:12:12

+0

如果你想詳細說明爲什麼這個工作和需要(也許你比我知道的更多?),這將使這個網頁更有用和有趣。 – 2010-07-13 19:13:01

5

我居然發現OU在我問這個問題之前,我從同事那裏得到答案,但在Google上找不到它,所以我想在這裏發佈它,以防其他人遇到同樣的問題。

我可以訪問屬性,像這樣:

$Beeblebrox->{'2ndhead'} 

這不是一個真正的法律有以數字開頭的屬性或變量,但不知何故,像這樣的動態參考使其成爲可能。對我來說,這聽起來像是一個奇怪的漏洞。