理解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 编程请选择正确的文本编辑软件
Dec 21 PHP
在同一窗体中使用PHP来处理多个提交任务
May 08 PHP
基于php无限分类的深入理解
Jun 02 PHP
php实现把数组按指定的个数分隔
Feb 17 PHP
PHP图片裁剪函数(保持图像不变形)
May 04 PHP
THINKPHP内容分页代码分享
Jan 14 PHP
php语言中使用json的技巧及json的实现代码详解
Oct 27 PHP
分享PHP计算两个日期相差天数的代码
Dec 23 PHP
详解PHP中array_rand函数的使用方法
Sep 11 PHP
PHP巧妙利用位运算实现网站权限管理的方法
Mar 12 PHP
ThinkPHP Where 条件中常用表达式示例(详解)
Mar 31 PHP
laravel5.6中的外键约束示例
Oct 23 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 第三节 变量介绍
2012/04/28 PHP
php检测url是否存在的方法
2015/04/14 PHP
PHP生成及获取JSON文件的方法
2016/08/23 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
2019/06/12 PHP
php设计模式之策略模式应用案例详解
2019/06/17 PHP
让任务管理器中的CPU跳舞的js代码
2008/11/01 Javascript
jquery 插件 web2.0分格的分页脚本,可用于ajax无刷新分页
2008/12/25 Javascript
escape、encodeURI 和 encodeURIComponent 的区别
2009/03/02 Javascript
setTimeout和setInterval的区别你真的了解吗?
2011/03/31 Javascript
基于 Docker 开发 NodeJS 应用
2014/07/30 NodeJs
JavaScript使用shift方法移除素组第一个元素实例分析
2015/04/06 Javascript
jquery实现平滑的二级下拉菜单效果
2015/08/26 Javascript
Javascript中的arguments对象
2016/06/20 Javascript
JS转换HTML转义符的方法
2016/08/24 Javascript
vue axios用法教程详解
2017/07/23 Javascript
JavaScript中正则表达式判断匹配规则及常用方法
2017/08/03 Javascript
详解Vue用自定义指令完成一个下拉菜单(select组件)
2017/10/31 Javascript
vue3修改link标签默认icon无效问题详解
2019/10/09 Javascript
node使用mysql获取数据库数据中文乱码问题的解决
2019/12/02 Javascript
[02:00]最后,我终于出了辉耀
2018/03/27 DOTA
Python中isnumeric()方法的使用简介
2015/05/19 Python
Python中字典(dict)合并的四种方法总结
2017/08/10 Python
python操作excel的方法(xlsxwriter包的使用)
2018/06/11 Python
Python简单计算给定某一年的某一天是星期几示例
2018/06/27 Python
Windows下将Python文件打包成.EXE可执行文件的方法
2018/08/03 Python
python编程使用协程并发的优缺点
2018/09/20 Python
基于Python实现简单学生管理系统
2020/07/24 Python
马克华菲官方商城:Mark Fairwhale
2016/09/04 全球购物
H&M美国官网:欧洲最大的服饰零售商
2016/09/07 全球购物
数控机床专业自荐信
2014/05/19 职场文书
婚礼家长致辞
2015/07/27 职场文书
互联网的下一个风口:新的独角兽将诞生
2019/08/02 职场文书
护理专业毕业自我鉴定
2019/08/12 职场文书
python中的mysql数据库LIKE操作符详解
2021/07/01 MySQL
浅析Python中的随机采样和概率分布
2021/12/06 Python
使用opencv-python如何打开USB或者笔记本前置摄像头
2022/06/21 Python