理解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下通过系统信号量加锁方式获取递增序列ID
Sep 25 PHP
codeigniter框架批量插入数据
Jan 09 PHP
php获取textarea的值并处理回车换行的方法
Oct 20 PHP
PHP跨平台获取服务器IP地址自定义函数分享
Dec 29 PHP
php使用Cookie实现和用户会话的方法
Jan 21 PHP
php中实现用数组妩媚地生成要执行的sql语句
Jul 10 PHP
分享微信扫码支付开发遇到问题及解决方案-附Ecshop微信支付插件
Aug 23 PHP
详解php中反射的应用
Mar 15 PHP
php通过curl添加cookie伪造登陆抓取数据的方法
Apr 02 PHP
微信随机生成红包金额算法php版
Jul 21 PHP
谈谈PHP连接Access数据库的注意事项
Aug 12 PHP
php封装单文件上传到数据库(路径)
Oct 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
DEDE采集大师官方留后门的删除办法
2011/01/08 PHP
VIM中设置php自动缩进为4个空格的方法详解
2013/06/14 PHP
php无限极分类递归排序实现方法
2014/11/11 PHP
php动态变量定义及使用
2015/06/10 PHP
PHP7+Nginx的配置与安装教程详解
2016/05/10 PHP
ThinkPHP3.2.1图片验证码实现方法
2016/08/19 PHP
HTML IMG标签 onload 内存溢出导致浏览器CPU占用过高
2021/03/09 Javascript
jquery 获取表单元素里面的值示例代码
2013/07/28 Javascript
Java/JS获取flash高宽的具体方法
2013/12/27 Javascript
JavaScript实现为指定对象添加多个事件处理程序的方法
2015/04/17 Javascript
jQuery通过写入cookie实现更换网页背景的方法
2016/04/15 Javascript
javascript之Boolean类型对象
2016/06/07 Javascript
jQuery实现下拉框多选 jquery-multiselect 的实例代码
2016/07/14 Javascript
JS面试题---关于算法台阶的问题
2016/07/26 Javascript
Web前端开发之水印、图片验证码
2016/11/27 Javascript
老生常谈js中的MVC
2017/07/25 Javascript
基于JavaScript 性能优化技巧心得(分享)
2017/12/11 Javascript
解决在Bootstrap模糊框中使用WebUploader的问题
2018/03/22 Javascript
利用js将ajax获取到的后台数据动态加载至网页中的方法
2018/08/08 Javascript
element-ui tree结构实现增删改自定义功能代码
2020/08/31 Javascript
js面试题之异步问题的深入理解
2020/09/20 Javascript
javascript this指向相关问题及改变方法
2020/11/19 Javascript
python 排序算法总结及实例详解
2016/09/28 Python
python实现飞机大战
2018/09/11 Python
python 实现数字字符串左侧补零的方法
2018/12/04 Python
python实现查找所有程序的安装信息
2020/02/18 Python
python开发一款翻译工具
2020/10/10 Python
英语师范专业毕业生自荐信
2013/09/21 职场文书
公务员职务工作的自我评价
2013/11/01 职场文书
学习决心书范文
2014/03/11 职场文书
体育馆的标语
2014/06/24 职场文书
销售竞赛活动方案
2014/08/23 职场文书
四风剖析查摆对照检查材料思想汇报
2014/09/24 职场文书
留学推荐信中文范文
2015/03/26 职场文书
话题作文之关于呼唤
2019/11/29 职场文书
Mysql索引失效 数据库表中有索引还是查询很慢
2022/05/15 MySQL