在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);
很明顯,數組強轉的形式生成的對象和第一種對象是一個類型的,而且它可以帶屬性也可以不帶。但是,它不能帶方法。