理解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语法(3)
Oct 09 PHP
PHP4 与 MySQL 交互使用
Oct 09 PHP
php设计模式 Proxy (代理模式)
Jun 26 PHP
php中DOMElement操作xml文档实例演示
Mar 26 PHP
浅析get与post的一些特殊情况
Jul 28 PHP
php的dl函数用法实例
Nov 06 PHP
PHP对象、模式与实践之高级特性分析
Dec 08 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
Feb 08 PHP
Yii1.1中通过Sql查询进行的分页操作方法
Mar 16 PHP
php实现和c#一致的DES加密解密实例
Jul 24 PHP
Laravel使用原生sql语句并调用的方法
Oct 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
163的邮件用phpmailer发送(实例详解)
2013/06/24 PHP
php ZipArchive压缩函数详解实例
2013/11/06 PHP
php用正则表达式匹配URL的简单方法
2013/11/12 PHP
WordPress中获取所使用的模板的页面ID的简单方法
2015/12/31 PHP
一个非常实用的php文件上传类
2017/07/04 PHP
PHP编译configure时常见错误的总结
2017/08/17 PHP
Windows上php5.6操作mongodb数据库示例【配置、连接、获取实例】
2019/02/13 PHP
PHP笛卡尔积实现原理及代码实例
2020/12/09 PHP
YUI 读码日记之 YAHOO.util.Dom - Part.1
2008/03/22 Javascript
jquery 滚动条事件简单实例
2013/07/12 Javascript
Javascript 实现图片无缝滚动
2014/12/19 Javascript
JavaScript用select实现日期控件
2015/07/17 Javascript
微信小程序 Button 组件详解及简单实例
2017/01/10 Javascript
angular.JS实现网页禁用调试、复制和剪切
2017/03/31 Javascript
微信小程序实现全国机场索引列表
2018/01/31 Javascript
AngularJS实现与后台服务器进行交互的示例讲解
2018/08/13 Javascript
详解js加减乘除精确计算
2019/03/19 Javascript
详解基于Vue的支持数据双向绑定的select组件
2019/09/02 Javascript
vue.js 实现a标签href里添加参数
2019/11/12 Javascript
详解Vue中的自定义指令
2020/12/07 Vue.js
[01:15]《辉夜杯》北京网鱼队巡礼
2015/10/26 DOTA
[06:59]DOTA2-DPC中国联赛3月7日Recap集锦
2021/03/11 DOTA
Python实现简单的代理服务器
2015/07/25 Python
Python实现求两个csv文件交集的方法
2017/09/06 Python
python实现内存监控系统
2021/03/07 Python
Python模拟简单电梯调度算法示例
2018/08/20 Python
python 3.74 运行import numpy as np 报错lib\site-packages\numpy\__init__.py
2019/10/06 Python
如何在Python 游戏中模拟引力
2020/03/27 Python
Python如何创建装饰器时保留函数元信息
2020/08/07 Python
利用html5 file api读取本地文件示例(如图片、PDF等)
2018/03/07 HTML / CSS
华纳兄弟工作室的官方授权商店:WB Shop
2018/11/30 全球购物
Perfume’s Club英国官网:购买香水和护肤品
2019/11/02 全球购物
初中班主任评语
2014/04/24 职场文书
学习党代会心得体会
2014/09/05 职场文书
python脚本框架webpy模板控制结构
2021/11/20 Python
Win11 vmware不兼容怎么办?Win11与VMware虚拟机不兼容的解决方法
2023/01/09 数码科技