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

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

在PHP中,如果没有事先准备好类,需要创建一个未定义类的对象,我们可以采用下面三种方式:

  • new stdClass()

  • new class{}

  • (object)[]

首先是stdClass,这个类是一个空的类模板,是PHP的内部保留关键字及类名。可以把它相像成是Java中的Object基类,在Java中,所有类都天然继承自Object基类。而PHP中的这个stdClass则是完全的一个空的类模板。你自己新创建的类并不是它的子类。但是用这个类模板可以创建一个自己未定义类的对象。当然,这个对象内部没有任何东西。

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

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

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

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

1$c = (object)[
2    'p' => 1
3];
4var_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

(0)

相关推荐

  • Class.getDeclaredMethods

    Returns an array containing Method objects reflecting all the declared methods of the class or inter ...

  • [PHP小课堂]优雅地创建未定义PHP对象

    [PHP小课堂]优雅地创建未定义PHP对象 关注公众号:[硬核项目经理]获取最新文章 添加微信/QQ好友:[DarkMatterZyCoder/149844827]免费得PHP.项目管理学习资料

  • 类与对象的创建

    类与对象的创建 一个项目应该只有一个main方法 无论一个类多么牛逼,它也只有属性和方法 this代表当前这个类 类是抽象的(把像的东西抽出来,这一类事物共同具有的,例如:人,都有姓名,性别,会吃饭, ...

  • 奚梦瑶高调复出!穿米色百褶裙尽显优雅气质,未修图状态很真实

    如今的P图技术相当娴熟,面部或是身材的瑕疵都能通过这种方式来直接隐藏,而未修图往往最能够展现女明星们的真实状态.嫁入豪门的奚梦瑶高调复出时,身穿米色百褶裙展示出了优雅的好气质.而在未修图中,她的状态就 ...

  • java学习——28.类和对象

    面向对象程序设计(Object Oriented Programming,OOP)是基于对象概念的软件设计方法. Java是纯面向对象的程序设计语言,具有面向对象的所有的特性. 今天介绍类和对象. 面 ...

  • 第10天:Python 类与对象

    在刚接触编程时,我们就了解到编程界有两大思想:面向过程与面向对象,Python 就是一门面向对象的语言,如果你了解过面向对象的思想,自然就知道面向对象思想包含两个基本概念:类与对象 ,下面我们就一起详 ...

  • 宋祖英穿酒红色连衣裙现身, 已显老态, 但端庄优雅的气质未变

    娱乐圈中的明星虽然优雅动人,而且工资也高,奈何竞争压力也大,前浪还在火后浪已经颇颇赶上来了,也是给人很大压力呀.女生们为了竞争各种保住颜值的手段,也是拼出就是翻车现场让人吐槽,真的是不如发挥自己的长处 ...

  • 真菌性病害“克星”,三唑类药剂防治对象大汇总!

    针对真菌性病害的三唑类药剂,在作物上使用很多很多,因为作物上真菌性病害发生比较多,比如白粉病.锈病.纹枯病.叶斑病.梨黑星病等等. 三唑类杀菌剂作为有机杂环类化合物,具有药效高.持效期长.杀菌谱广等特 ...

  • 类与对象

    在上一篇文章中,说了什么是类.而在最后留下了一个问题:"汤姆和玛丽把一只大象往一个冰箱里面装".这句话跟类又有什么关系? 通过对比最开始的句子:"一只动物被两个人往一个家 ...

  • 科技·Kotlin从入门到精通,类和对象

    类和对象是两种以计算机为载体的计算机语言的合称.对象是对客观事物的抽象,类是对对象的抽象.类是一种抽象的数据类型.它们的关系是,对象是类的实例,类是对象的模板.类定义Kotlin类可以包含:构造函数和 ...