理解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
一个用于mysql的数据库抽象层函数库
Oct 09 PHP
PHP生成带有雪花背景的验证码
Sep 28 PHP
PHP查询MySQL大量数据的时候内存占用分析
Jul 22 PHP
处理单名多值表单的详解
Jun 08 PHP
PHP中使用imagick实现把PDF转成图片
Jan 26 PHP
PHP使用适合阅读的格式显示文件大小的方法
Mar 05 PHP
使用Appcan客户端自动更新PHP版本号(全)
Jul 31 PHP
php is_writable判断文件是否可写实例代码
Oct 13 PHP
使用PHPMailer发送邮件实例
Feb 15 PHP
PHP 实现文件压缩解压操作的方法
Jun 14 PHP
TP5多入口设置实例讲解
Dec 15 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网页游戏学习之Xnova(ogame)源码解读(九)
2014/06/24 PHP
Laravel基础_关于view共享数据的示例讲解
2019/10/14 PHP
日期函数扩展类Ver0.1.1
2006/09/07 Javascript
JavaScript方法和技巧大全
2006/12/27 Javascript
JavaScript弹簧振子超简洁版 完全符合能量守恒,胡克定理
2009/10/25 Javascript
JavaScript setTimeout和setInterval的使用方法 说明
2010/03/25 Javascript
JS实现模仿微博发布效果实例代码
2013/12/16 Javascript
获取3个数组不重复的值的具体实现
2013/12/30 Javascript
Jquery对数组的操作技巧整理
2014/03/25 Javascript
JavaScript中字符串分割函数split用法实例
2015/04/07 Javascript
jQuery实现美观的多级动画效果菜单代码
2015/09/06 Javascript
jQuery网页右侧广告跟随滚动代码分享
2020/04/20 Javascript
javascript数据结构之双链表插入排序实例详解
2015/11/25 Javascript
Nodejs获取网络数据并生成Excel表格
2020/03/31 NodeJs
JS正则获取HTML元素的方法
2017/03/31 Javascript
js下载文件并修改文件名
2017/05/08 Javascript
全面解析Node.js 8 重要功能和修复
2017/06/02 Javascript
原生JavaScript实现Ajax异步请求
2017/11/19 Javascript
Vue使用枚举类型实现HTML下拉框步骤详解
2018/02/05 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
2018/04/24 Javascript
深入剖析Node.js cluster模块
2018/05/23 Javascript
vue 解决路由只变化参数页面组件不更新问题
2019/11/05 Javascript
[00:16]热血竞技场
2019/03/06 DOTA
Python实现程序的单一实例用法分析
2015/06/03 Python
Python 列表(List) 的三种遍历方法实例 详解
2017/04/15 Python
pandas DataFrame实现几列数据合并成为新的一列方法
2018/06/08 Python
python实现文法左递归的消除方法
2020/05/22 Python
python中复数的共轭复数知识点总结
2020/12/06 Python
浅析HTML5页面元素及属性
2021/01/20 HTML / CSS
2014年扫黄打非工作总结
2014/12/03 职场文书
学术会议通知范文
2015/04/15 职场文书
雾霾停课通知
2015/04/24 职场文书
2021年pycharm的最新安装教程及基本使用图文详解
2021/04/03 Python
CSS3实现的水平标题菜单
2021/04/14 HTML / CSS
在Java中Collection的一些常用方法总结
2021/06/13 Java/Android
四十九个javascript小知识实用技巧
2021/11/20 Javascript