天天看點

優雅地建立未定義類PHP對象

在PHP中,如果沒有事先準備好類,需要建立一個未定義類的對象,我們可以采用下面三種方式:

  • new stdClass()
  • new class{}
  • (object)[]

首先是stdClass,這個類是一個空的類模闆,是PHP的内部保留關鍵字及類名。可以把它相像成是Java中的Object基類,在Java中,所有類都天然繼承自Object基類。而PHP中的這個stdClass則是完全的一個空的類模闆。你自己新建立的類并不是它的子類。但是用這個類模闆可以建立一個自己未定義類的對象。當然,這個對象内部沒有任何東西。

$a = new stdClass();
var_dump($a);      

new class{}呢?做過一段時間開發,接觸過前端js和其他動态語言的應該能猜到,這個是匿名類。一般在參數對象中很常見。它建立出來的對象是可以帶屬性方法的。

$b = new class{
    public $p = 1;
};
var_dump($b);      

最後我們來看到的是使用數組強轉成對象的形式來生成一個對象。

$c = (object)[
    'p' => 1
];
var_dump($c);      

很明顯,數組強轉的形式生成的對象和第一種對象是一個類型的,而且它可以帶屬性也可以不帶。但是,它不能帶方法。

繼續閱讀