php保留类stdClass_PHP_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > PHP > php保留类stdClass

php保留类stdClass

 2013/5/19 14:51:02  zxphdu  程序员俱乐部  我要评论(0)
  • 摘要:php核心定义了一些保留类型,stdClass就是其中之一。看到网上许多php开发者对这个保留类的认识很模糊,不知道有什么用、怎么用,鉴于此,在这里一起整理分析下。欢迎拍砖提意见。普遍困惑的两点:stdClass怎么是个空类,里边没有任何成员?stdClass这个空类有什么用?普遍错误理解的几点:stdClass是php的顶层基类,其他保留类或自定义类都默认继承stdClass;继承了stdClass的类可以动态添加属性;一切php变量都是stdClass的实例。要正确理解一个架构、框架、设计
  • 标签:PHP

php核心定义了一些保留类型,stdClass就是其中之一。看到网上许多php开发者对这个保留类的认识很模糊,不知道有什么用、怎么用,鉴于此,在这里一起整理分析下。欢迎拍砖提意见。

  • 普遍困惑的两点:

stdClass怎么是个空类,里边没有任何成员?

stdClass这个空类有什么用?

stdClass是php的顶层基类,其他保留类或自定义类都默认继承stdClass;

继承了stdClass的类可以动态添加属性;

一切php变量都是stdClass的实例。

?

要正确理解一个架构、框架、设计、技术细节等等,首先得从提出的历史情境出发。

  • 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);
?>

?以上例子,涉及两步操作:

?

  1. 构建一个单纯的对象(stdClass类型);
  2. 在单纯对象上动态添加属性;

正是为了支持转对象、操作数据、反序列化等等,php需要一个高度抽象的空类,并且可以动态扩展,stdClass做到了。

?

?

以上还不足以阐述明白stdClass,再补充以下几点:

  1. stdClass虽然是高度抽象到空,但是并不能说他是基类、顶层基类。谈基类、父类、或者子类这些说法的基础场景就是继承,谁继承谁,谁被继承,必须有这些前提;stdClass未被其他任何类默认或者隐式继承,目前所有的php版本都没有隐式继承机制,这个不同于.NET平台的System.Object;
  2. 类对象动态添加属性的特性跟是否继承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可以被开发者显式继承,但是这样做没有多大意义

?

?

发表评论
用户名: 匿名