您好,欢迎访问一九零五行业门户网

PHP数组转对象的几种方法

今天在做产品的时候无意中看到了一行代码,
$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= newstdclass;foreach($arras$key=> $value) { $object->$key= $value;} var_dump($object);
结果输出如下:
object(stdclass)#1 (3) { [a]=> int(1) [b]=> int(2) [c]=> int(3)}
二、对象转数组functionobject_to_array($obj) { $_arr= is_object($obj) ? get_object_vars($obj) : $obj; foreach($_arras$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(newarrayobject($arr));
结果输出如下:
object(arrayobject)#1 (1) { [storage:arrayobject:private]=> array(2) { [key1]=> string(5) test1 [key2]=> string(5) test2 }}
当然php强大灵活决定了必定还有很多其他方法进行数组与对象的转换。
其它类似信息

推荐信息