理解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 相关文章推荐
第1次亲密接触PHP5(2)
Oct 09 PHP
PHP中显示格式化的用户输入
Oct 09 PHP
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
Jun 18 PHP
2个Codeigniter文件批量上传控制器写法例子
Jul 25 PHP
PHP获取当前页面URL函数实例
Oct 22 PHP
PHP中变量引用与变量销毁机制分析
Nov 15 PHP
php去除数组中重复数据
Nov 18 PHP
PHP+APACHE实现网址伪静态
Feb 22 PHP
php两种无限分类方法实例
Apr 21 PHP
Laravel中unique和exists验证规则的优化详解
Jan 28 PHP
ThinkPHP框架实现的邮箱激活功能示例
Jun 15 PHP
thinkPHP5框架实现多数据库连接,跨数据连接查询操作示例
May 29 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 Smarty date_format [格式化时间日期]
2010/03/15 PHP
php守护进程 加linux命令nohup实现任务每秒执行一次
2011/07/04 PHP
PHP表单提交表单名称含有点号(.)则会被转化为下划线(_)
2011/12/14 PHP
php实现批量删除挂马文件及批量替换页面内容完整实例
2016/07/08 PHP
Jquery 学习笔记(一)
2009/10/13 Javascript
基于jQuery实现图片的前进与后退功能
2013/04/24 Javascript
jquery 漂亮的删除确认和提交无刷新删除示例
2013/11/13 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
2015/03/26 Javascript
jQuery插件PageSlide实现左右侧栏导航菜单
2015/04/12 Javascript
js中toString()和String()区别详解
2017/03/23 Javascript
Angularjs实现数组随机排序的方法
2018/10/02 Javascript
在 Angular-cli 中使用 simple-mock 实现前端开发 API Mock 接口数据模拟功能的方法
2018/11/28 Javascript
express + jwt + postMan验证实现持久化登录
2019/06/05 Javascript
JS实现动态倒计时功能(天数、时、分、秒)
2019/12/12 Javascript
JS一次前端面试经历记录
2020/03/19 Javascript
[58:46]OG vs NAVI 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
[01:00:14]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第二场 2月28日
2021/03/11 DOTA
一份python入门应该看的学习资料
2018/04/11 Python
在Python中实现替换字符串中的子串的示例
2018/10/31 Python
python自动结束mysql慢查询会话的实例代码
2019/10/27 Python
在pycharm中实现删除bookmark
2020/02/14 Python
python读取文件指定行内容实例讲解
2020/03/02 Python
详解Python IO口多路复用
2020/06/17 Python
python连接mysql数据库并读取数据的实现
2020/09/25 Python
苹果美国官方商城:Apple美国
2016/08/24 全球购物
日本卡普空电视游戏软件公司官方购物网站:e-CAPCOM
2018/07/17 全球购物
2019年.net常见面试问题
2012/02/12 面试题
毕业生求职简历的自我评价
2013/10/23 职场文书
学习雷锋精神演讲稿
2014/05/10 职场文书
诚实守信道德模范事迹材料
2014/08/15 职场文书
2014小学生国庆65周年演讲稿
2014/09/21 职场文书
优秀校长事迹材料
2014/12/24 职场文书
Python基础之函数嵌套知识总结
2021/05/23 Python
简单且有用的Python数据分析和机器学习代码
2021/07/02 Python
python中Matplotlib绘制直线的实例代码
2021/07/04 Python
MySQL千万级数据表的优化实战记录
2021/08/04 MySQL