文档章节

stdClass()类 解析

艹PHP
 艹PHP
发布于 2014/09/02 14:44
字数 603
阅读 185
收藏 2

一维数组:

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


本文转载自:http://blog.163.com/lgh_2002/blog/static/44017526201121835134349/

共有 人打赏支持
艹PHP
粉丝 1
博文 14
码字总数 1295
作品 0
广州
程序员
私信 提问
什么是PHP中的stdclass()

什么是PHP中的stdclass() 看到有人用这个,不知道为何,找到如下文章解释: 中文的,应用自http://www.stud.uni-karlsruhe.de/~uu5i/blog/index.php?aid=261 php的stdClass是什么 简述 这两天...

新新
2014/07/09
0
0
php对象和数组相互转换的方法

这篇文章主要介绍了php对象和数组相互转换的方法,通过两个自定义函数实现对象与数组的相互转换功能,非常简单实用,需要的朋友可以参考下。 一、对象和数组互转 本文实例讲述了php对象和数组相...

Corwien
2016/06/16
21
0
PHP将json解析成数组输出的问题

如何将json转数组后的值输出? 我想将[date] => 2014-11-08和[currentCity] => 洪湖 分别存在$data和$city这个应该怎么做?只存值、 PHP代码段:...

rain53
2014/11/08
61
3
一个json文件,想提取某一个字符串中的一个值,但这个值是数组的,我要怎样解析这个数组呢?小弟我对数组不是很熟悉

[item] => stdClass Object ( [items] => stdClass Object ([delist_time] => 2012-07-30 13:09:00 [detail_url] => http://a.html [input_str] => EG720KG4-NA [item_imgs] => stdClass Obj......

yzw杨
2012/07/27
3.3K
9
PHP中serialize和json序列化与反序列化的区别

(本文转载自 https://blog.tanteng.me/2015/11/serialize-json-diff/) 在PHP中,serialize和json两种方式对一个对象或数组进行序列化或反序列化有什么区别呢? 假设一个对象和一个数组: ...

shangluyi
2018/06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx rails 详细站点配置入门教程

Ruby on Rails 是一个用于开发数据库驱动的网络应用程序的完整框架。Rails基于MVC(模型- 视图- 控制器)设计模式。从视图中的Ajax应用,到控制器中的访问请求和反馈,到封装数据库的模型,R...

xiangyunyan
46分钟前
3
0
Shiro

Shiro是Apache的一个开源框架,是一个权限管理的框架,实现用户认证、用户授权等。 只要有用户参与一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户...

嘿嘿嘿IT
49分钟前
1
0
Flutter 之 Dart语言基础详解 上篇

经过了一个星期的React Native的学习和了解,感觉还是Flutter的优势会更高一些,而且从学习成本来说感觉做安卓的同学学习flutter会相对低一点,门槛会低很多。 当然dart的基础笔者还是从其他...

林-师傅等等我
今天
5
0
Java NIO问题总结

问题1:IO事件在被处理之前,selector.select()方法依然能够返回该事件。即如果在一个线程A中进行selector.select(),而将selector.selectedKeys()中的SelectionKey交由业务线程池去处理,则...

月下狼
今天
5
0
ehcache

简单介绍 EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。Ehcache是一种广泛使用的开 源Java分布式缓存。主要面向通用缓存,Java EE和轻量...

大笨象会跳舞吧
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部