如何创建未定义类PHP对象

php中,如果没有事先准备好类,需要创建一个未定义类的对象,我们可以采用下面三种方式:1、“new stdclass()”、“new class{}(object)”和“(object)[]”。下面将由小编来详细介绍。

如何创建未定义类PHP对象

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

new stdClass()

new class{}

立即学习“PHP免费学习笔记(深入)”;

(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);

登录后复制

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

数组强转方式生成的对象非常的直观好理解。如果只是属性对象的封装,使用这种方式会更加地优雅舒服。复杂的对象生成可以使用匿名类的方式进行生成。而一些仅需要占位的对象,可以使用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

登录后复制

推荐学习:php视频教程

以上就是如何创建未定义类PHP对象的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2463866.html

(0)
上一篇 2025年3月4日 16:01:54
下一篇 2025年3月4日 16:02:13

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • PHP中什么是enum类型?set类型?

    php中我们了解了那么多关于php的知识,不知道你们对php的类型有多少了解,我相信很大一部分人会不知道这部分知识点,那么不急本篇文章就是带领大家更深刻的去了解这个内容。 相关推荐:一分钟学会PHP中关于封装水印函数 enum类型:  单选…

    编程技术 2025年3月4日
    200
  • php怎么将关联数组转成索引数组

    在php中,可以利用array_values()函数来将关联数组转成索引数组,语法“array_values(array)”;array_values()函数可以返回包含所有数组元素值的数组,被返回的数组将使用数值键。 本教程操作环境:wi…

    2025年3月4日
    200
  • 不同C++许可类型如何影响代码重用?

    c++++ 许可类型影响代码重用,其中:copyleft 许可限制代码重用,要求衍生作品使用相同许可。permissive 许可最大化代码重用,允许无限制使用和修改。商业许可平衡代码重用和商业利益,允许有偿使用代码,但限制了免费使用。 C+…

    2025年3月3日
    200
  • C++ 函数名中使用哪些字符是不允许的?

    以下字符不允许出现在 c++++ 函数名中:关键字(如 int、void、bool 等)特殊符号(如 #、%、&、*、- 等)空格(函数名不得包含空格)例外:下划线 (_) 允许用作函数名中的字符美元符号 ($) 和范围运算符 (:…

    2025年3月3日
    200
  • 使用 C++ 重载函数处理不同参数类型

    函数重载允许使用相同函数名,但不同参数列表处理不同类型参数。#include 提示:可用于函数名称空间重载return_type function_name(parameter_list)实战案例:计算不同形状面积的函数 area。 使用 …

    2025年3月3日
    200
  • 借助人工智能提升 C 代码效率和性能

    摘要:借助人工智能优化 c 代码ai 可提升 c 代码效率和性能,方法如下:代码补全:加快编码速度和准确性。错误检测:识别潜在错误,缩短调试时间。代码重构:提升性能和可维护性。性能分析:找出瓶颈和低效区域,指导优化。例如,ai 优化后的 b…

    2025年3月3日
    100
  • C# to PHP base64 encode/decode

    we should probably url encode your base64 string on the c# side before you send it. And URL Decode it on the php side pr…

    编程技术 2025年3月3日
    200
  • 最大连续子序列和问题

    问题描述:给定一个序列a[1],a[2]…a[n],求解其连续子序列中元素和的最大值 例如: 6 -1 5 4 -7 这个序列最大连续子序列和为14 具体问题见: hdoj 1003  tzu 1202 这个问题在《数据结构与算…

    编程技术 2025年3月3日
    200
  • 分享ASP.NET学习笔记(11)WebPages PHP

    ASP.NET Web Pages – PHP php 开发人员请注意,web pages 可以用 php 编写。 WebMatrix 支持 PHP 乍一看,认为 WebMatrix 只支持微软的技术。这是不正确的。在 WebM…

    编程技术 2025年3月3日
    200
  • c语言之后学什么?

    有朋友在学完c语言后困惑之后该怎么办?小编想说其实只要你c语言基础打得好,学习其他语言都不是事儿,主要看你未来想从事哪方面的工作,下面我将就每几个领域和大家说说,以后可以学哪些。 想未来从事嵌入式开发的,可以学习ARM嵌入式等; 想未来从事…

    2025年3月3日
    200

发表回复

登录后才能评论