PHP的 stdClass类 详解及几种数组对象转换方法【转】

$c= new$class_name;
                                                        
$object_os= newstdClass;
                                                        
$c->on_init_app_router($object_os);

 

很疑惑,于是去类$c中看了一下,发现原来是对空类stdClass的实例$object_os进行了一些属性的动态添加。

从上面的三行代码中大致能看出来stdClass能为我们做些什么。

stdClass在产品的代码中见过几次,但是自己没有用过,于是查了一下相关资料,把心得整理总结如下。

 

stdClass是PHP的一个基类,所有的类几乎都继承这个类,所以任何时候都可以被new,可以让这个变量成为一个object。同时,这个基类又有一个特殊的地方,就是没有方法。

stdClass是在PHP5中逐渐流行起来的,这是因为,PHP5的对象的独特性,对象在任何地方被调用,都是引用地址型的,所以相对消耗的资源会少一些。在其它页面为它赋值时是直接修改,而不是引用一个拷贝。

例如:

 

$user= newstdClass();
$user->name = ‘gouki’;
$myUser= $user;
$myUser->name = ‘flypig’;

 

如果在PHP4时代,这样的代码就是在消耗系统资源。因为:

 

$myUser= $user;

 

这是创建了一个拷贝。所以,在PHP4的时候,都是这样使用:

 

$myUser= & $user;

 

从文章开始的三行代码我们可以看到,stdClass可以用来生成对象类型的元素,那么接下来,我们就通过stdClass将一个数组转为为对象类引出几种数组对象相互转换的方法:

一、stdClass数组转对象

 

$arr= array();                                            
$arr['a'] = 1;                                               
$arr['b'] = 2;                                               
$arr['c'] = 3;                                             
                   
$object= new stdClass;
foreach($arr as $key=> $value) {
    $object -> $key= $value;
}
                   
var_dump($object);

 

结果输出如下:

 

object(stdClass)#1 (3) {
  ["a"]=>
  int(1)
  ["b"]=>
  int(2)
  ["c"]=>
  int(3)
}

 

二、对象转数组

 

function object_to_array($obj) 
{ 
    $_arr= is_object($obj) ? get_object_vars($obj) : $obj; 
    foreach($_arr as $key=> $val) 
    { 
        $val= (is_array($val) || is_object($val)) ?       object_to_array($val) : $val; 
        $arr[$key] = $val; 
    } 
    return $arr; 
}

 

三、ArrayObject方法数组转对象

 

$arr= array('key1'=>'test1', 'key2'=> 'test2');
           
var_dump(new ArrayObject($arr));

 

结果输出如下:

 

object(Array Object)#1 (1) {
  ["storage":"ArrayObject":private]=>
  array(2) {
    ["key1"]=>
    string(5) "test1"
    ["key2"]=>
    string(5) "test2"
  }
}
转自博客:
http://code-tech.diandian.com/post/2012-11-06/40041312820


posted @ 2014-08-09 14:39  Zell~Dincht  阅读(698)  评论(0编辑  收藏  举报