如何在PHP中定義一個空對象

用一個新的數組,我這樣作: json

$aVal = array();

$aVal[key1][var1] = "something";
$aVal[key1][var2] = "something else";

對象有相似的語法嗎 數組

(object)$oVal = "";

$oVal->key1->var1 = "something";
$oVal->key1->var2 = "something else";

#1樓

$x = new stdClass();

手冊中註釋總結起來最好: 函數

stdClass是默認的PHP對象。 stdClass沒有屬性,方法或父級。 它不支持魔術方法,而且不實現任何接口。 this

當將標量或數組轉換爲Object時,將得到stdClass的實例。 只要須要通用對象實例,就可使用stdClass。 spa


#2樓

您有一個糟糕但有用的技術: code

$var = json_decode(json_encode([]), FALSE);

#3樓

正如其餘人指出的那樣,您可使用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功能的基礎。 字符串


#4樓

除了zombat的答案,若是您一直忘記stdClass

function object(){

        return new stdClass();

    }

如今您能夠執行如下操做:

$str='';
$array=array();
$object=object();

#5樓

要以相似方式訪問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};
相關文章
相關標籤/搜索