在WordPress中很多地方使用stdClass来定义一个对象(而通常是用数组的方式),然后使用get_object_vars来把定义的对象『转换』成数组.

如下代码所示:

$tanteng = new stdClass();
$tanteng->name = 'tanteng';
$tanteng->email = 'xxx@qq.com';
$info = get_object_vars($tanteng);
print_r($info);
exit;

输出:

Array ( [name] => tanteng [email] => xxx@qq.com )

get_object_vars的作用是返回由对象属性组成的关联数组。它的效果跟这样定义数组其实是一样的:

$tanteng = array();
$tanteng['name'] = 'tanteng';
$tanteng['email'] = 'xxx@qq.com';

可以这样理解:stdClass是一个内置类,它没有成员变量,也没有成员方法的一个类,new一个stdClass就是实例化了一个『空』对象,它本身没什么意义,但是用stdClass定义有什么好处呢?

如下代码:

$user = new stdClass();
$user->name = 'gouki';
$user->hehe = 'hehe';
$myUser = $user;
$myUser->name = 'flypig';
print_r($user);
print_r($myUser);
print_r($user);

这里$myUser被赋值$user,但其实并没有新开辟一块内存存储变量,$myUser还是指的stdClass这个对象,通过$myUser改变属性页就改变了$user的属性,并不是新建一个副本,如果程序中有许多这样的操作,使用stdClass的方式可以节省内存开销.

运行结果:

stdClass Object
(
[name] => flypig
[hehe] => hehe
)
stdClass Object
(
[name] => flypig
[hehe] => hehe
)
stdClass Object
(
[name] => flypig
[hehe] => hehe
)

从结果可以看出,改变$myUser的属性确实改变了$user声明的stdClass属性,而如果$user是一个数组,赋值给$myUser,那就拷贝了一个副本给$myUser,这样增大系统开销.

当然,你也可以反过来,把一个数组转换为对象:

$hehe['he1'] = 'he1';
$hehe['he2'] = 'he2';
$hh = (object) $hehe;
print_r($hh);

打印结果:

stdClass Object ( [he1] => he1 [he2] => he2 )

最新文章

  1. 回发或回调参数无效。在配置中使用 pages enableEventValidation=true 或在页面中使用 %@ Page EnableEventValidation=true % 启用了事件验证
  2. Socket Server-基于线程池的TCP服务器
  3. 关于window.onload
  4. BestCoder Round #86 解题报告
  5. 磨刀不误砍柴工,使用visual studio之前应该先了解这些...
  6. MySQL数据库主键设计原则
  7. IE6和IE7的line-height和现代浏览器不一致的问题
  8. Android 开机动画源码分析
  9. Java的结构之美【1】——构造对象
  10. 关于DCL的使用
  11. Idea集成maven插件
  12. ARM与FPGA通过spi通信设计1.spi基础知识
  13. git上clone需要ssh时
  14. 设置table的每竖的宽度
  15. JDK源码之ArrayList
  16. mysql 多列索引的生效规则,生成1000w数据的存储过程
  17. Google SRE 读书笔记 扒一扒SRE用的那些工具
  18. 什么是webpack?
  19. session hijacking-php.ini
  20. Jquery中bind(), live(), on(), delegate()四种注册事件的优缺点,建议使用on()

热门文章

  1. RabbitMQ整合Spring Booot【Exchange-Fanout模式】
  2. 使用GridSearchCV进行网格搜索微调模型
  3. 【LeetCode算法-38】Count and Say
  4. python之psutil模块
  5. git bush 无法使用箭头进行选择
  6. Java语言和JVM的使用说明书
  7. Matlab使用新发现1(小技巧:shell 命令、工程工作目录设置相关)
  8. java8新特性:对map集合排序
  9. 【剑指offer】面试题 19. 正则表达式匹配
  10. pyhton数据类型:字典、集合、列表、元组