用一個新的數組,我這樣作: json
$aVal = array(); $aVal[key1][var1] = "something"; $aVal[key1][var2] = "something else";
對象有相似的語法嗎 數組
(object)$oVal = ""; $oVal->key1->var1 = "something"; $oVal->key1->var2 = "something else";
$x = new stdClass();
stdClass是默認的PHP對象。 stdClass沒有屬性,方法或父級。 它不支持魔術方法,而且不實現任何接口。 this
當將標量或數組轉換爲Object時,將得到stdClass的實例。 只要須要通用對象實例,就可使用stdClass。 spa
您有一個糟糕但有用的技術: code
$var = json_decode(json_encode([]), FALSE);
正如其餘人指出的那樣,您可使用stdClass。 可是我認爲沒有()會更乾淨,就像這樣: 對象
$obj = new stdClass;
可是基於這個問題,看來您真正想要的是可以動態地向對象添加屬性。 儘管能夠,但您不須要爲此使用stdClass。 確實可使用任何類。 只需建立任何類的對象實例並開始設置屬性便可。 我喜歡建立本身的類,其名稱僅爲o,並提供一些我在這些狀況下喜歡使用的基本擴展功能,而且很是適合從其餘類進行擴展。 基本上,這是我本身的基礎對象類。 我也喜歡簡單地命名爲o()的函數。 像這樣: 接口
class o { // some custom shared magic, constructor, properties, or methods here } function o() { return new o; }
若是您不但願擁有本身的基礎對象類型,則只需讓o()返回新的stdClass。 一個優勢是,與將stdClass用做類名,函數名或二者都使用相比,o比stdClass更容易記住而且更短。 即便您的o類中沒有任何代碼,也要比笨拙的大寫stdClass(可能會引用「性傳播疾病類」的想法)記憶起來容易。 若是自定義o類,則可能會發現o()函數的用法而不是構造函數的語法。 這是一個正常的函數,它返回一個值,該值比構造方法的限制要少。 例如,函數名稱能夠做爲字符串傳遞給接受可調用參數的函數。 一個函數還支持連接。 所以,您能夠執行如下操做:$ result = o($ internal_value)-> some_operation_or_conversion_on_this_value(); 開發
這是基礎「語言」構建其餘語言層(頂層以徹底內部DSL編寫)的一個很好的開始。 這相似於lisp的開發風格,PHP對其的支持比大多數人意識到的要好。 我意識到這個問題有點切線,可是這個問題觸及到我認爲是充分利用PHP功能的基礎。 字符串
除了zombat的答案,若是您一直忘記stdClass
function object(){ return new stdClass(); }
如今您能夠執行如下操做:
$str=''; $array=array(); $object=object();
要以相似方式訪問stdClass中的數據,您只需使用{$ var}語法便可對關聯數組進行操做。
$myObj = new stdClass; $myObj->Prop1 = "Something"; $myObj->Prop2 = "Something else"; // then to acces it directly echo $myObj->{'Prop1'}; echo $myObj->{'Prop2'}; // or what you may want echo $myObj->{$myStringVar};