stdClass()类 解析

一维数组:

$andy = array();

$andy[‘a‘] = 1;

$andy[‘b‘] = 2;

$andy[‘c‘] = 3;

我想把它变成这样

$andy = array();

$andy = (object)$andy;

$andy->a = 1;

$andy->b = 2;

$andy->c = 3;

新建空数组只要$andy = array();

新建空对像却要$andy = new Andy; 而且还得先有个class Andy{}

或者得2行

$andy = array();

$andy = (object)$andy;

用array直接改类型成object有点别扭,往下看:

$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,可以直接将数组转化为对象这也是一个好办法哦。

时间: 2024-11-05 10:05:15

stdClass()类 解析的相关文章

Thrift compiler代码生成类解析

代码生成类解析: Thrift--facebook RPC框架,介绍就不说了,百度,google一大把,使用也不介绍,直接上结构和分析吧. Hello.thrift文件内容如下: namespace java com.tomsun.thrift.generated.demo service Hello { string helloString(1:string para) } 内容很简单,申明个RPC service(Hello),服务方法helloString,方法参数格式(seq: para

C++ 模板类解析

具体模板类作用这边就不细说了,下面主要是描述下模板类的使用方法以及注意的一些东西. #include <iostream> using namespace std; template <typename numtype> //定义类模板 class Compare { public : Compare(numtype a,numtype b) {x=a;y=b;} numtype max( ) {return (x>y)?x:y;} numtype min( ) {retur

Bootstrap 类解析

Bootstrap 类解析 元素 Bootstrap 类 定义 <div> container 内容容器 <table> table 表格 <table> table-striped 带条纹背景的表格 <button> btn 按钮 <button> btn-success 成功按钮 <span> glyphicon 字形图标 <span> glyphicon-pencil 铅笔图标 <span> glyphi

FilterEngine 类解析——OpenCV图像滤波核心引擎(zz)

<2>FilterEngine 类解析——OpenCV图像滤波核心引擎 FilterEngine类是OpenCV关于图像滤波的主力军类,OpenCV图像滤波功能的核心引擎.各种滤波函数比如blur, GaussianBlur,到头来其实是就是在函数末尾处定义了一个Ptr<FilterEngine>类型的f,然后f->apply( src, dst )了一下而已. 这个类可以把几乎是所有的滤波操作施加到图像上.它包含了所有必要的中间缓存器.有很多和滤波相关的create系函数的

[C# | XML] XML 反序列化解析错误:&lt;xml xmlns=&#39;&#39;&gt; was not expected. 附通用XML到类解析方法

使用 XML 反化时出现错误: public static TResult GetObjectFromXml<TResult>(string xmlString) { TResult result; XmlSerializer serializer = new XmlSerializer(typeof(TResult), new XmlRootAttribute("xml")); using (TextReader tr = new StringReader(xmlStri

stdClass类

stdClass类仅仅是php一个保留类,或者说一个类似于strlen函数这样的角色,初始的时候是没有成员变量也没有成员方法,也可以使用其传递变量参数,但是没有可以调用的方法. 也是可以被继承的,但是这样做似乎没有什么意义. 类与对象在php里面是不可分开的,有对象就会有一个类与其对应,否则这个对象就成了没有亲人的孩子,但是实际上有一个非常特殊的情况,就是比如数组,json这种转换成object类型的时候,就会对应stdclass类型

Spark 资源调度包 stage 类解析

spark 资源调度包 Stage(阶段) 类解析 类注释: /** * A stage is a set of parallel tasks all computing the same function that need to run as part * of a Spark job, where all the tasks have the same shuffle dependencies. * 一个阶段是所有计算相同功能的并行任务集合, 作为spark作业的一部分, 这些任务都有相同

不适用工具类解析Json

解析的数据: { "citycode": "101051301", "citydesc": "黑龙江 双鸭山", "cityname": "双鸭山", "data": [ { "date": "2015-08-29", "icon": "d07|n07", "temperatur

调用android自带的json类解析出错!!!

============问题描述============ {"weatherinfo":{"city":"北京","cityid":"101010100","temp1":"2","temp2":"15","weather":"小到中雨转小雨","img1":"