理解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抽象工厂模式(Elgg)
Mar 21 PHP
php实现的百度搜索某地天气的小偷代码
Apr 23 PHP
浅析ThinkPHP中execute和query方法的区别
Jun 13 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(五)
Jun 23 PHP
简单实用的网站PHP缓存类实例
Jul 18 PHP
php实现无限级分类
Dec 24 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
Aug 31 PHP
Yii2简单实现多语言配置的方法
Jul 23 PHP
php+ajax+json 详解及实例代码
Dec 12 PHP
PHP实现APP微信支付的实例讲解
Feb 10 PHP
使用laravel的migrate创建数据表的方法
Sep 30 PHP
Laravel5.1 框架Middleware中间件基本用法实例分析
Jan 04 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
一个捕获函数输出的函数
2007/02/14 PHP
PHP基础学习小结
2011/04/17 PHP
PHP代码优化的53个细节
2014/03/03 PHP
php开启与关闭错误提示适用于没有修改php.ini的权限
2014/10/16 PHP
WIFI万能钥匙密码查询接口实例
2015/09/28 PHP
jquery select(列表)的操作(取值/赋值)
2009/08/06 Javascript
JS取request值以及自动执行使用示例
2014/02/24 Javascript
JSON格式的键盘编码对照表
2015/01/29 Javascript
javascript的switch用法注意事项分析
2015/02/02 Javascript
javascript同步服务器时间和同步倒计时小技巧
2015/09/24 Javascript
JS判断字符串变量是否含有某个字串的实现方法
2016/06/03 Javascript
浅谈JS函数定义方式的区别
2016/10/30 Javascript
详解JavaScript中this的指向问题
2017/01/20 Javascript
原生js实现无限循环轮播图效果
2017/01/20 Javascript
Vue获取DOM元素样式和样式更改示例
2017/03/07 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
2017/06/09 Javascript
微信小程序开发教程之增加mixin扩展
2017/08/09 Javascript
JQueryDOM之样式操作
2019/03/27 jQuery
使用webpack编译es6代码的方法步骤
2019/04/28 Javascript
JS求1到任意数之间的所有质数的方法详解
2019/05/20 Javascript
Element实现表格分页数据选择+全选所有完善批量操作
2019/06/07 Javascript
15 分钟掌握vue-next响应式原理
2019/10/13 Javascript
js实现圆形显示鼠标单击位置
2020/02/11 Javascript
在Python中关于中文编码问题的处理建议
2015/04/08 Python
python字典键值对的添加和遍历方法
2016/09/11 Python
Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】
2017/07/24 Python
浅谈python3.x pool.map()方法的实质
2019/01/16 Python
便携式太阳能系统的创新者:GOAL ZERO
2018/02/04 全球购物
诚信承诺书范文
2014/03/27 职场文书
期中考试反思800字
2014/05/01 职场文书
项目负责人任命书
2014/06/04 职场文书
小学语文复习计划
2015/01/19 职场文书
布达拉宫的导游词
2015/02/02 职场文书
工作建议书范文
2019/07/08 职场文书
解决SpringBoot文件上传临时目录找不到的问题
2021/07/01 Java/Android
Windows 11上手初体验:任务栏和开始菜单等迎来大改
2021/11/21 数码科技