stdClass在PHP5才开始被流行。而stdClass也是zend的一个保留类。stdClass是PHP的一个基类,所有的类几乎都继承 这个类,所以任何时候都可以被new,可以让这个变量成为一个object。同时,这个基类又有一个特殊的地方,就是没有方法。凡时用new stdClass()的变量,都不可能会出现$a->test()这种方式的使用。PHP5的对象的独特性,对象在任何地方被调用,都是引用地址型 的,所以相对消耗的资源会少一点。在其它页面为它赋值时是直接修改,而不是引用一个拷贝。

The PHP stdClass() is something that isn’t well documented but i will try to shed some light into the matter. stdClass is a default PHP object which has no predefined members. The name stdClass is used internally by Zend and is reserved. So that means that you cannot define a class named stdClass in your PHP code.

It can be used to manually instantiate generic objects which you can then set member variables for, this is useful for passing objects to other functions or methods which expect to take an object as an argument. An even more likely usage is casting an array to an object which takes each value in the array and adds it as a member variable with the name based on the key in the array.

function arrayToObject($array)
{if(!is_array($array)) return $array;$object = new stdClass();if(is_array($array) && count($array) > 0){foreach($array as $name=>$value){$name = strtolower(trim($name));if($name) $object->$name = arrayToObject($value);}return $object;}else return FALSE;
}

实例:

<?php
$array = array('name' => 'one','sex' => 'two','old' => 'three');$arrayobject = arrayToObject($array);echo $arrayobject->name;  // one

以上的定义大多数都是正确的,但是一个致命性的诊断错误: stdClass是PHP的一个基类,所有的类几乎都继承这个类。 看一个简单的例子:

<?php
class EmptyClass {}$object = new EmptyClass();
if ($object instanceof stdClass) {echo 'yes';
}else{echo 'no';
}

执行代码,输出”no”,这个例子充分说明了stdClass类并不是所有类的基类。它仅仅是PHP的一个保留类,或者说一个类似于strlen函数这样的一个角色。 我们从源码的维度看看stdClass类的实现,它注册的位置在 Zend/zend_buildin_functions.c文件中。如下:

ZEND_MINIT_FUNCTION(core) { /* {{{ */zend_class_entry class_entry;/* 注册stdClass 类 */INIT_CLASS_ENTRY(class_entry, "stdClass", NULL);zend_standard_class_def = zend_register_internal_class(&class_entry TSRMLS_CC);/* 注册默认类,接口,如Exception类,SPL中的一些类等 */zend_register_default_classes(TSRMLS_C);    return SUCCESS;
}
/* }}} */

这是zend_builtin_module的模块初始化函数,在PHP内核进行模块初始化操作时会自动加载这个函数, 这样,stdClass类的注册操作也就会被执行了。从这段代码可以看出,stdClass类是一个没有成员变量也没有成员方法的类。 它的所有的魔术方法,父类、接口等在初始化时都被设置成NULL。由于在PHP中对于一个类我们无法动态的添加方法, 所以这个类只能用来处理动态属性,这也是我们一种常见的用法。

总结一下:

stdClass类是PHP的一个内部保留类,初始时没有成员变量也没成员方法,所有的魔术方法都被设置为NULL,可以使用其传递变量参数,但是没有可以调用的方法。stdClass类可以被继承,只是这样做没有什么意义。

说白了:

它是PHP提供的一个基类,就是一个空白的类.里面什么都没有.我们可以实例化它.然后定义一系列的变量,通过它来进行变量的传递.但是,由于实例化后不能添加方法.所以是不允许我们再添加任何方法的了.

<?
$obj = new stdClass;
$obj->a = 1;
$obj->b = 2;

部分来源: http://www.phppan.com/2011/05/php-stdclass/

PHP: stdclass, 数组转成对象相关推荐

  1. php 字符串数组转数组对象_php怎么将数组转成对象?

    php将数组转成对象的方法:1.使用数据类型转换,在数组变量前添加"(Object)"来将数组转成对象.2.先使用json_encode()函数将数组转换为json字符串:然后使用 ...

  2. php把数组转换成对象,php怎么将数组转换成对象

    echoecho() 函数输出一个或多个字符串.注释:echo() 函数实际不是一个函数,所以您不必对它使用括号.然而,如果您想要传多于一个参数给 echo(),使用括号将会生成解析错误.print ...

  3. html中,将字符串对象数组转成对象数组

    1.字符串数组如下 [{"id":"1208183791342927872","name":"测试1","va ...

  4. vue数组转换成对象

    vue数组转换成对象 const data = [{ key: "alan", value: 12 },{ key: "mike", value: 18 } ] ...

  5. JSP页面使用JS把数组封装成对象

    当我们遇到这种情形,需要把页面中的表格每一行作为一组数据提交到后台保存到数据库,我们需要进行数据的收集. 序号 名称 类别 规格 1 机箱 华硕 GLP800 2 鼠标 雷蛇 DPI500 因为是在页 ...

  6. jquery中json数组转成对象的方法

    rights=JSON.parse(str); 其中str为后台传过来的json数组的字符串,前台我放到input标签中了然后jquery获取到的是json数组的字符串,然后再js中用上面的语句就可以 ...

  7. js 把数组转换成对象

    var arr = [ ['username', 'jack'], ['age', 18], ['gender', '男'] ] 转换成      {usename: 'jack', age: 18, ...

  8. ts 使用数组 拼接成对象展示

    <script setup lang="ts"> const a: number[] = [1, 23, 4, 532, 5, 100]; </script> ...

  9. java字符串转对象数组_将字符串数组转为java对象

    最近在工作中,遇到一个场景:接受到一个字符串数组,需要将其转为一个对象,反射实现的方法如下: /** * 将字符串数组转成对象:支持double int boolean string * @param ...

最新文章

  1. 使用Fiddler抓取手机HTTP流量包
  2. 霸王洗发水经理被指冲击报社殴打记者
  3. 以太坊源码linux下如何编译,以太坊教程:搭建环境、编写编译一个智能合约
  4. Kubernetes各组件的功能
  5. 剖析boot.img的制作流程
  6. 编写函数判断一个数是否是回文数_程序员面试金典 - 面试题 01.04. 回文排列
  7. G - Eating Plan
  8. jedis使用_Redis的三个框架:Jedis,Redisson,Lettuce
  9. 信息学奥赛一本通 1025:保留12位小数的浮点数 | OpenJudge NOI 1.1 05
  10. python函数分为哪几类_Python 69个内置函数分8类总结
  11. es6添加删除class_es6-class的基本用法
  12. App Icon 和 LaunchImage 尺寸
  13. VSCode创建vue模板(快捷方便)
  14. excel锁定单元格不能修改_Excel如何锁定部分区域不被编辑,1分钟就学会
  15. 05 JavaScript框架汇总
  16. 西电大学计算机专硕,2021西安电子科技大学计算机专硕考研成功经验分享
  17. 第十二周项目二----操作用邻接表存储的图
  18. 会议OA之我的会议(排座送审)
  19. Java简单知识点小结
  20. 栈详解(顺序栈和链栈)

热门文章

  1. 特征因子是什么意思_【空间分析】地理探测器应用-分异及因子探测、交互作用探测(共享单车骑行目的地时空特征与影响因素)...
  2. print_w php,THINKPHP的dump打印数组函数,输出在浏览器非常友好。
  3. consul命令行查看服务_第三章 consul服务注册与服务查询
  4. 【Swin Transformer Block】的整体流程如下:
  5. 深度残差收缩网络:(六)代码实现
  6. GAN的一些重要论文
  7. express 创建ejs项目,使用html
  8. ios开发ocr识别_传统图像处理技术,ocr识别技术算法
  9. LinkedList理解(2)元素删除
  10. console.log打印值,颜色 - 解决篇