理解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 相关文章推荐
PHP4实际应用经验篇(4)
Oct 09 PHP
php 多个submit提交表单 处理方法
Jul 07 PHP
php 数组的一个悲剧?
May 11 PHP
hadoop中一些常用的命令介绍
Jun 19 PHP
php多文件上传实现代码
Feb 20 PHP
thinkphp autoload 命名空间自定义 namespace
Jul 17 PHP
php利用header函数下载各种文件
Aug 24 PHP
Symfony查询方法实例小结
Jun 28 PHP
深入研究PHP中的preg_replace和代码执行
Aug 15 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
Mar 01 PHP
浅谈laravel中的关联查询with的问题
Oct 10 PHP
Yii 框架使用数据库(databases)的方法示例
May 19 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
PHP操作文件方法问答
2007/03/16 PHP
PHP XML error parsing SOAP payload on line 1
2010/06/17 PHP
table标签的结构与合并单元格的实现方法
2013/07/24 PHP
php cookie使用方法学习笔记分享
2013/11/07 PHP
Linux下PHP安装mcrypt扩展模块笔记
2014/09/10 PHP
PHP多维数组转一维数组的简单实现方法
2015/12/23 PHP
PHP会员找回密码功能的简单实现
2016/09/05 PHP
HTML Dom与Css控制方法
2010/10/25 Javascript
奉献给JavaScript初学者的编写开发的七个细节
2011/01/11 Javascript
在JavaScript中typeof的用途介绍
2013/04/11 Javascript
jQuery语法高亮插件支持各种程序源代码语法着色加亮
2013/04/27 Javascript
使用JavaScript+canvas实现图片裁剪
2015/01/30 Javascript
基于js实现的限制文本框只可以输入数字
2016/12/05 Javascript
Vue-Router实现组件间跳转的三种方法
2017/11/07 Javascript
微信小程序实现全国机场索引列表
2018/01/31 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
2020/10/24 Javascript
[01:09:19]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第二场 2月28日
2021/03/11 DOTA
17个Python小技巧分享
2015/01/23 Python
使用Python生成随机密码的示例分享
2016/02/18 Python
Python lambda函数基本用法实例分析
2018/03/16 Python
Python 3 实现定义跨模块的全局变量和使用教程
2019/07/07 Python
Python获取一个用户名的组ID过程解析
2019/09/03 Python
pytorch中的weight-initilzation用法
2020/06/24 Python
Python实现Appium端口检测与释放的实现
2020/12/31 Python
HTML5学习心得总结(推荐)
2016/07/08 HTML / CSS
全球最大的在线旅游公司:Expedia
2017/11/16 全球购物
Harman Audio官方商店:购买JBL、Harman Kardon、Infinity和AKG
2019/12/05 全球购物
Ajax实现页面无刷新留言效果
2021/03/24 Javascript
六一儿童节活动总结
2014/08/27 职场文书
“四风”问题对照检查材料思想汇报
2014/09/16 职场文书
党的群众路线对照检查材料思想汇报
2014/09/25 职场文书
毕业论文致谢部分怎么写
2015/05/14 职场文书
pycharm debug 断点调试心得分享
2021/04/16 Python
redis实现排行榜功能
2021/05/24 Redis
JavaScript中的宏任务和微任务详情
2021/11/27 Javascript
Python利用capstone实现反汇编
2022/04/06 Python