今天在做产品的时候无意中看到了一行代码,
$c= new$class_name;
$object_os= newstdClass;
$c->on_init_app_router($object_os);
很疑惑,于是去类$c中看了一下,发现原来是对空类stdClass的实例$object_os进行了一些属性的动态添加。
从上面的三行代码中大致能看出来stdClass能为我们做些什么。
stdClass在产品的代码中见过几次,但是自己没有用过,于是查了一下相关资料,把心得整理总结如下。
stdClass是PHP的一个基类,所有的类几乎都继承这个类,所以任何时候都可以被new,可以让这个变量成为一个object。同时,这个基类又有一个特殊的地方,就是没有方法。
立即学习“PHP免费学习笔记(深入)”;
stdClass是在PHP5中逐渐流行起来的,这是因为,PHP5的对象的独特性,对象在任何地方被调用,都是引用地址型的,所以相对消耗的资源会少一些。在其它页面为它赋值时是直接修改,而不是引用一个拷贝。
例如:
PHP5学习对象教程由美国人古曼兹、贝肯、瑞桑斯编著,简张桂翻译,电子工业出版社于2007年12月1日出版的关于PHP5应用程序的技术类图书。该书全面介绍了PHP 5中的新功能、编程方法及设计模式,还分析阐述了PHP 5中新的数据库连接处理、错误处理和XML处理等机制,帮助读者系统了解、熟练掌握和高效应用PHP。
291
$user= newstdClass(); $user->name = ‘gouki’; $myUser= $user; $myUser->name = ‘flypig’;
如果在PHP4时代,这样的代码就是在消耗系统资源。因为:
$myUser= $user;
这是创建了一个拷贝。所以,在PHP4的时候,都是这样使用:
$myUser= & $user;
从文章开始的三行代码我们可以看到,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;
}
$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强大灵活决定了必定还有很多其他方法进行数组与对象的转换。
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号