2011-11-18 79 views
1

我需要訪問我指定爲變量的php對象屬性。當屬性名稱具有不允許的字符時訪問PHP對象屬性

$ phpObj - > $財產

此$屬性中可能包含破折號字符( - ),報價,%,甚至空白等。 PHP不允許將這些字符用作變量名稱,導致我無法訪問這些屬性。

什麼是一個很好的解決方案來處理這個問題?我打開編碼的$屬性到字母數字第一,然後使用它作爲屬性變量,但這種編碼應該是唯一的一個特定的字符串。

例如,我想確保$ phpObj-> First-Prop和$ phpObj-> first-prop應該以不同的方式標識。

+0

在哪裏這些名字是從哪裏來的?值得使用'__get()'和'__set()'從數組中訪問它們。 – simshaun

+0

相關:[以美元符號作爲節點名稱訪問PHP對象](http://stackoverflow.com/questions/4378807/access-a-php-object-with-dollar-sign-as-node-name) – netcoder

回答

5
$propertyName = 'property-name'; 

$phpObj->{$propertyName} = ... 
$phpObj->{"property-name"} = ... 

僅這可能是問題:

$phpObj->First-Prop and $phpObj->first-prop 

變量/功能/方法/屬性在PHP定義是不區分大小寫...

+0

謝謝,但這種不區分大小寫對我來說可能是一個問題。我可能不得不重新考慮我的方法 – Nands

+0

使用試圖獲取[DomDocument類]的'attributeNode'部分的'nodeValue'時,phpcs的Object屬性「nodeValue」的問題不在有效的snake_case中http://php.net/manual/en/class.domdocument.php)。此解決方法有助於解決問題。 – GFargo

0

不知道您想在這裏實現什麼但。 但 你會最好的impliment可用的字符,a-zA-Z0-9即時猜測可能的白名單。那麼你可以分配知道所有的字母都允許在php中的屬性。

我不明白爲什麼這些屬性需要獨特的屬性名稱,肯定是一個具有唯一值的鍵屬性會實現類似的事情,可以追加到一切。

php不區分大小寫,所以$ phpObj-> First-Prop和$ phpObj-> First-Prop將取最後一個屬性。

我希望幫助,如果您有任何更多的執行力度,更重要的是你要實現的目標,我會盡我所能來幫助

+0

如果您需要添加區分大小寫,可以將它們存儲在包含數組的屬性中。 PHP中的數組區分大小寫。 :) – encodes

+1

謝謝。這些屬性實際上是一組用戶爲該php對象創建的標籤。除非具有完全相同名稱的標籤(區分大小寫)已經存在,否則用戶可以爲對象創建多個標籤。我還需要爲每個特定於此對象的標記存儲一個整數值。要訪問這個整數值,我需要訪問該屬性。這種方法是嘗試實現Solr響應分析器,我昨天曾問過一個問題http://stackoverflow.com/questions/8132764/storing-and-searching-dynamic-key-value-pairs-in-solr-document – Nands

+0

好。你可以有FphpObj->屬性['filed'] = 0和$ phpObj-> properties ['fiELD'] = 1;希望這可能會有用。 – encodes

相關問題