PHP中的stdClass是一个PHP的内置类,基本上是所有类的基类。它的特点是它里面没有任何方法。它的作用是把一个非object类型数据转化为object类型数据。
下面是一个把数组转化为object类型数据的函数:(也可以用PHP的类型强制转换)
function arrayToObject($array) {
if(!is_array($array)) { return $array; }
$object = new stdClass();
if (is_array($array) && count($array) > 0) {
foreach ($array as $name=>$value)
{
$name = strtolower(trim($name));
if (isset($name))
{ $object->$name = arrayToObject($value); }
} return $object;
}
else { return FALSE; }
}
stdclass可以作为基类使用,其最大特点是,(其派生类)可以自动添加成员变量,而无须在定义时说明。
一切php变量都是 stdClass 的实例
如
class ccs extends stdClass
{
var $v1;
function ccs(){
$this->v1=1;
}
};
$ee= new ccs();
$ee->v2=2;
上面的代码不会出错。这带来了很大的方便性,当然,也有一定的不安全因素。
另外,这个功能也解决了我长期以来的一个疑惑,就是像mysql_fetch_object这样的函数是如何实现的。
因为它是所有类的基类,我们不继承,验证下:
class A{
public function set($name)
{
$this->name=$name;
}
}
$obja=new A;
$obja->set(“hehe”);
var_dump($obja);
输出结果:
object(A)#2 (1) { [“name”]=> string(4) “hehe” }
答案正确。
评论