天天看点

优雅地创建未定义类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);      

很明显,数组强转的形式生成的对象和第一种对象是一个类型的,而且它可以带属性也可以不带。但是,它不能带方法。

继续阅读