优雅地建立未定义类PHP对象

在PHP中,若是没有事先准备好类,须要建立一个未定义类的对象,咱们能够采用下面三种方式:php

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

首先是stdClass,这个类是一个空的类模板,是PHP的内部保留关键字及类名。能够把它相像成是Java中的Object基类,在Java中,全部类都自然继承自Object基类。而PHP中的这个stdClass则是彻底的一个空的类模板。你本身新建立的类并非它的子类。可是用这个类模板能够建立一个本身未定义类的对象。固然,这个对象内部没有任何东西。前端

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

new class{}呢?作过一段时间开发,接触过前端js和其余动态语言的应该能猜到,这个是匿名类。通常在参数对象中很常见。它建立出来的对象是能够带属性方法的。git

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

最后咱们来看到的是使用数组强转成对象的形式来生成一个对象。github

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

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

数组强转方式生成的对象很是的直观好理解。若是只是属性对象的封装,使用这种方式会更加地优雅舒服。复杂的对象生成能够使用匿名类的方式进行生成。而一些仅须要占位的对象,能够使用stdClass的方法,固然用空数组的方式也很方便。数组

须要注意的是,数组强转须要遵照类型转换的规则。好比数字下标的问题。微信

在平常开发中,咱们对于一些接口或者数据库ORM框架的使用中会常常用这些功能。好比一些ORM框架的插入、修改须要传入的是只包含属性的对象。这时候就能够使用上述的方法灵活地生成对象而不用完整的定义类模板了。框架

测试代码:
https://github.com/zhangyue0503/dev-blog/blob/master/php/201910/source/%E4%BC%98%E9%9B%85%E5%9C%B0%E5%88%9B%E5%BB%BA%E6%9C%AA%E5%AE%9A%E4%B9%89PHP%E5%AF%B9%E8%B1%A1.php学习

参考资料:
https://www.php.net/manual/zh/language.types.object.php#117149

关注公众号:【硬核项目经理】获取最新文章测试

添加微信/QQ好友:【xiaoyuezigonggong/149844827】免费得PHP、项目管理学习资料

知乎、公众号、抖音、头条搜索【硬核项目经理】

B站ID:482780532

相关文章
相关标签/搜索