理解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 相关文章推荐
smarty section简介与用法分析
Oct 03 PHP
PHP判断远程url是否有效的几种方法小结
Oct 08 PHP
php实现memcache缓存示例讲解
Dec 04 PHP
php递归获取目录内文件(包含子目录)封装类分享
Dec 25 PHP
一个比较不错的PHP日历类分享
Nov 18 PHP
php生成excel列名超过26列大于Z时的解决方法
Dec 29 PHP
php实现中文字符截取防乱码方法汇总
Apr 29 PHP
PHP 7安装调试工具Xdebug扩展的方法教程
Jun 17 PHP
php数据序列化测试实例详解
Aug 12 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
Aug 31 PHP
PHP实现二维数组中的查找算法小结
Jun 09 PHP
laravel 实现根据字段不同值做不同查询
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学习之php4与php5之间会穿梭一点点感悟
2007/05/03 PHP
php dirname(__FILE__) 获取当前文件的绝对路径
2011/06/28 PHP
探讨PHP中this,self,parent的区别详解
2013/06/08 PHP
PHP加密函数 Javascript/Js 解密函数
2013/09/23 PHP
javascript some()函数用法详解
2014/11/13 PHP
启用OPCache提高PHP程序性能的方法
2019/03/21 PHP
php框架知识点的整理和补充
2021/03/01 PHP
新页面打开实际尺寸的图片
2006/08/25 Javascript
浅谈 jQuery 事件源码定位问题
2014/06/18 Javascript
JS实现仿Windows7风格的网页右键菜单效果代码
2015/09/11 Javascript
jQuery实现带水平滑杆的焦点图动画插件
2016/03/08 Javascript
JS 事件绑定、事件监听、事件委托详细介绍
2016/09/28 Javascript
js 监控iframe URL的变化实例代码
2017/07/12 Javascript
浅谈Node.js之异步流控制
2017/10/25 Javascript
Vue 组件(component)教程之实现精美的日历方法示例
2018/01/08 Javascript
vue实现图片加载完成前的loading组件方法
2018/02/05 Javascript
如何写好一个vue组件,老夫的一年经验全在这了(推荐)
2019/05/18 Javascript
解决vue单页面修改样式无法覆盖问题
2019/08/05 Javascript
详解vue 自定义组件使用v-model 及探究其中原理
2019/10/11 Javascript
JavaScript中使用Spread运算符的八种方法总结
2020/06/18 Javascript
JavaScript的垃圾回收机制与内存管理
2020/08/06 Javascript
vue.js封装switch开关组件的操作
2020/10/26 Javascript
TypeScript魔法堂之枚举的超实用手册
2020/10/29 Javascript
前端 javascript 实现文件下载的示例
2020/11/24 Javascript
Django框架中方法的访问和查找
2015/07/15 Python
利用Python破解验证码实例详解
2016/12/08 Python
浅谈Python批处理文件夹中的txt文件
2019/03/11 Python
Python eval函数原理及用法解析
2020/11/14 Python
Python使用Opencv实现边缘检测以及轮廓检测的实现
2020/12/31 Python
马耳他航空公司官方网站:Air Malta
2019/05/15 全球购物
港澳通行证委托书怎么写
2014/08/02 职场文书
漂亮妈妈观后感
2015/06/08 职场文书
关于战胜挫折的名言警句大全!
2019/07/05 职场文书
Java网络编程之UDP实现原理解析
2021/09/04 Java/Android
JavaScript 中for/of,for/in 的详细介绍
2021/11/17 Javascript
Nginx速查手册及常见问题
2022/04/07 Servers