在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);
很明显,数组强转的形式生成的对象和第一种对象是一个类型的,而且它可以带属性也可以不带。但是,它不能带方法。