php核心定义了一些保留类型,stdClass就是其中之一。看到网上许多php开发者对这个保留类的认识很模糊,不知道有什么用、怎么用,鉴于此,在这里一起整理分析下。欢迎拍砖提意见。
- 普遍困惑的两点:
stdClass怎么是个空类,里边没有任何成员?
stdClass这个空类有什么用?
- 普遍错误理解的几点:
stdClass是php的顶层基类,其他保留类或自定义类都默认继承stdClass;
继承了stdClass的类可以动态添加属性;
一切php变量都是stdClass的实例。
要正确理解一个架构、框架、设计、技术细节等等,首先得从提出的历史情境出发。
- stdClass的历史情境:
stdClass是php面向对象的产物;
面向对象有些语法特性需要高度抽象支持,stdClass为此而生,未封装任何成员,只是为了保留一份“单纯”,构造一个“单纯”的类对象,告诉开发者:“我只是个空对象,很纯,白纸一张,无污染”。
<?php $arg = 1; $obj = (object)$vag; ?>
<?php $arr = array('name'=>'zxp','gender'=>'男'); $obj = (object)$arr; ?>
<?php $dataSet = mysql_query($query,$link); $dataObj = mysql_fetch_object($dataSet); ?>
以上例子,涉及两步操作:
- 构建一个单纯的对象(stdClass类型);
- 在单纯对象上动态添加属性;
正是为了支持转对象、操作数据、反序列化等等,php需要一个高度抽象的空类,并且可以动态扩展,stdClass做到了。
以上还不足以阐述明白stdClass,再补充以下几点:
- stdClass虽然是高度抽象到空,但是并不能说他是基类、顶层基类。谈基类、父类、或者子类这些说法的基础场景就是继承,谁继承谁,谁被继承,必须有这些前提;stdClass未被其他任何类默认或者隐式继承,目前所有的php版本都没有隐式继承机制,这个不同于.NET平台的System.Object;
- 类对象动态添加属性的特性跟是否继承stdClass没有本质关系。stdClass构建的对象可以动态添加属性,任何自定义类(不继承stdClass)构建的对象也可以动态添加属性;
例:
<?php class Test { public $arg1 = 1; public $arg2 = 'abc'; var $arg3 = 'def'; private function func1() { ; } } $obj = new Test(); $obj->arg4 = 'zxp'; var_dump($obj); ?>
输出:
object(Test)[1] public 'arg1' => int 1 public 'arg2' => string 'abc' (length=3) public 'arg3' => string 'def' (length=3) public 'arg4' => string 'zxp' (length=3)
3. stdClass可以被开发者显式继承,但是这样做没有多大意义。
相关推荐
stdClass类是PHP的一个内部保留类,初始时没有成员变量也没成员方法,所有的魔术方法都被设置为NULL,可以使用其传递变量参数,但是没有可以调用的方法。stdClass类可以被继承,只是这样做没有什么意义。 该类是PHP...
主要介绍了PHP标准类(stdclass)用法,结合实例形式分析了php内置标准类的原理与使用方法,需要的朋友可以参考下
主要介绍了PHP中的stdClass类,用白话介绍了stdClass类,需要的朋友可以参考下
而stdClass也是zend的一个保留类。stdClass是PHP的一个基类,所有的类几乎都继承这个类,所以任何时候都可以被new,可以让这个变量成为一个object。同时,这个基类又有一个特殊的地方,就是没有方法。凡是用new ...
需要操作的数据: 复制代码 代码如下: $test =Array ( [0] => stdClass Object ( [tags] => 最快的... 您可能感兴趣的文章:PHP中STDCLASS用法实例分析PHP标准类(stdclass)用法示例php中stdClass的用法分析PHP中把stdCl
本文实例讲述了PHP中STDCLASS用法。分享给大家供大家参考,具体如下: PHP中STDCLASS在我们开发应用中使用到的不多,但是PHP中STDCLASS作用是非常的大的,下面我们一起来看PHP中STDCLASS的用法. 在WordPress中很多地方...
本文实例讲述了PHP使用new StdClass()创建空对象的方法。分享给大家供大家参考,具体如下: PHP可以用 $object = new StdClass(); 创建一个没有成员方法和属性的空对象。 很多时候,程序员们会将一些参数配置项之类...
主要介绍了php中stdClass的用法,实例分析了stdClass的功能及使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
PHP和JS通讯通常都用json,但用 json 传过来的数组并不是标准的array,而是 stdClass 类型。那么我们可以参考下面的几个方法进行转换。
很多人在PHP输出一个二维数组的时候出现“Fatal error: Cannot use object of type stdClass as array in……”。解决办法分析如下: 现有这样一个二维数组: 复制代码 代码如下:Array ( [0] => stdClass Object ( ...
主要介绍了一个ASP创建动态对象的工厂类,可以动态创建对象,和无限制的增加类的属性,和PHP中的stdClass功能类似,需要的朋友可以参考下