理解PHP中的stdClass类


Posted in PHP onApril 18, 2014

相信大家跟我一样,会经常看到和下面很类似的PHP代码:

$user = new stdClass();
$user->name = 'gouki';

这样的代码,这是干嘛用的呢?
翻开手册,搜索stdClass,你会发现,手册上几乎没有介绍,如果你再次搜索google,看到的也几乎全是英文解释。
其实,stdClass在PHP5才开始被流行。而stdClass也是zend的一个保留类。似乎没有其他作用。也几乎没有任何说明。
或者,我们可以这么理解:stdClass是PHP的一个基类,所有的类几乎都继承这个类,所以任何时候都可以被new,可以让这个变量成为一个object。同时,这个基类又有一个特殊的地方,就是没有方法。
凡时用new stdClass()的变量,都不可能会出现$a->test()这种方式的使用。
或者,我们可以又这么理解一下,正因为PHP5的对象的独特性,对象在任何地方被调用,都是引用地址型的,所以相对消耗的资源会少一点。在其它页面为它赋值时是直接修改,而不是引用一个拷贝。
例如:

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

如果在PHP4时代,这样的代码就是在消耗系统资源。因为:
$myUser = $user;
这是创建了一个拷贝。所以,在PHP4的时候,都是这样使用:
$myUser = & $user;

有人说,为什么不用数组呢?数组不是更方便吗?而且对于PHP这样的弱类型程序来说,用数组应该是最方便的。
确实。数组在程序的使用中应该是最方便的,然而数组的每次被引用($a = $b),其实都是创建了一个副本,而且,数组被unset后,还是占用了内存(这个是听人说来的,我没有测试……也不知道怎么测试,如果有人知道,请告诉我,谢谢 )
不过SPL的标准类库里,还有一个函数arrayobject,可以直接将数组转化为对象这也是一个好办法哦。
PHP 相关文章推荐
通过对服务器端特性的配置加强php的安全
Oct 09 PHP
FCKeditor的安装(PHP)
Jan 13 PHP
MySQL授权问题总结
May 06 PHP
PHP运行时强制显示出错信息的代码
Apr 20 PHP
基于PHP文件操作的详解
Jun 05 PHP
PHP无限分类(树形类)
Sep 28 PHP
php实现在站点里面添加邮件发送的功能
Apr 28 PHP
[原创]php求圆周率的简单实现方法
May 30 PHP
PHP 微信扫码支付源代码(推荐)
Nov 03 PHP
利用PHP判断是否是连乘数字串的方法示例
Jul 03 PHP
PHP设计模式之状态模式定义与用法详解
Apr 02 PHP
PHP实现的微信公众号扫码模拟登录功能示例
May 30 PHP
php使用imagick模块实现图片缩放、裁剪、压缩示例
Apr 17 #PHP
php实现的漂亮分页方法
Apr 17 #PHP
codeigniter中测试通过的分页类示例
Apr 17 #PHP
php生成静态页面的简单示例
Apr 17 #PHP
php文件服务实现虚拟挂载其他目录示例
Apr 17 #PHP
php实现12306余票查询、价格查询示例
Apr 17 #PHP
PHP5.5在windows安装使用memcached服务端的方法
Apr 16 #PHP
You might like
漫威DC御用漫画家去世 他的表情包曾走红网络
2020/04/09 欧美动漫
强烈推荐:php.ini中文版(1)
2006/10/09 PHP
php的计数器程序
2006/10/09 PHP
跟我学Laravel之快速入门
2014/10/15 PHP
纯CSS3实现质感细腻丝滑按钮
2021/03/09 HTML / CSS
jQuery 页面 Mask实现代码
2010/01/09 Javascript
JS返回上一页实例代码通过图片和按钮分别实现
2013/08/16 Javascript
jquery.cookie.js使用指南
2015/01/05 Javascript
jQuery Validate表单验证入门学习
2015/12/18 Javascript
AngularJs concepts详解及示例代码
2016/09/01 Javascript
WEB 前端开发中防治重复提交的实现方法
2016/10/26 Javascript
微信小程序 textarea 详解及简单使用方法
2016/12/05 Javascript
浅析webpack 如何优雅的使用tree-shaking(摇树优化)
2017/08/16 Javascript
JavaScript输入分钟、秒倒计时技巧总结(附代码)
2017/08/17 Javascript
利用canvas中toDataURL()将图片转为dataURL(base64)的方法详解
2017/11/20 Javascript
微信小程序结合mock.js实现后台模拟及调试
2019/03/28 Javascript
vue2配置scss的方法步骤
2019/06/06 Javascript
微信浏览器下拉黑边解决方案 wScroollFix
2020/01/21 Javascript
[01:02:53]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第二局
2016/03/06 DOTA
[00:18]天涯墨客三技能展示
2018/08/25 DOTA
python检查指定文件是否存在的方法
2015/07/06 Python
Django如何开发简单的查询接口详解
2019/05/17 Python
python多进程间通信代码实例
2019/09/30 Python
Python FFT合成波形的实例
2019/12/04 Python
python多线程实现同时执行两个while循环的操作
2020/05/02 Python
Python代码中如何读取键盘录入的值
2020/05/27 Python
使用pyplot.matshow()函数添加绘图标题
2020/06/16 Python
AmazeUI 列表的实现示例
2020/08/17 HTML / CSS
类如何去实现接口
2013/12/19 面试题
小学生期末评语大全
2014/04/21 职场文书
党员四风剖析材料
2014/08/27 职场文书
学生评语集锦
2015/01/04 职场文书
通知书大全
2015/04/27 职场文书
2015年清剿火患专项行动工作总结
2015/07/27 职场文书
个人职业生涯规划之自我评估篇
2019/09/03 职场文书
Linux7.6二进制安装Mysql8.0.27详细操作步骤
2021/11/27 MySQL