php核心定义了一些保留类型,stdClass就是其中之一。看到网上许多php开发者对这个保留类的认识很模糊,不知道有什么用、怎么用,鉴于此,在这里一起整理分析下。欢迎拍砖提意见。
stdClass怎么是个空类,里边没有任何成员?
stdClass这个空类有什么用?
stdClass是php的顶层基类,其他保留类或自定义类都默认继承stdClass;
继承了stdClass的类可以动态添加属性;
一切php变量都是stdClass的实例。
?
要正确理解一个架构、框架、设计、技术细节等等,首先得从提出的历史情境出发。
stdClass是php面向对象的产物;
面向对象有些语法特性需要高度抽象支持,stdClass为此而生,未封装任何成员,只是为了保留一份“单纯”,构造一个“单纯”的类对象,告诉开发者:“我只是个空对象,很纯,白纸一张,无污染”。
?
class="例1" name="code"><?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); ?>
?以上例子,涉及两步操作:
?
正是为了支持转对象、操作数据、反序列化等等,php需要一个高度抽象的空类,并且可以动态扩展,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可以被开发者显式继承,但是这样做没有多大意义。
?
?