最近在某源码中发现了这个类:stdClass,发现该源码中并没有声明过这个类,再查手册也没发现,于是上网找下资料,原来stdClass在PHP5才开始被流行。而stdClass也是zend的一个保留类。也可以理解为stdClass是PHP的一个基类,所有的类几乎都继承这个类,所以任何时候都可以被new,可以让这个变量成为一个object。同时,这个基类又有一个特殊的地方,就是没有方法。
当我们声明一个数组时候:
$arrTemp = array();
$arrTemp[‘a’] = 1;
$arrTemp[‘b’] = 2;
$arrTemp[‘c’] = 3;
如果声明一个对象,操作就多了一些
$arrTemp = array();
$objTemp = (object)$arrTemp;
$objTemp->a = 1;
$objTemp->b = 2;
$objTemp->c = 3;
新建空数组只要$arrTemp = array();
新建空对像却要先有个class obj{}
倘若使用 stdClass
$user = new stdClass();
$user->name = ‘gouki’;
$user->id = ‘12’;
$user->group = ‘manager’
我们可以这么理解一下,正因为PHP5的对象的独特性,对象在任何地方被调用,都是引用地址型的,所以相对消耗的资源会少一点。在其它页面为它赋值时是直接修改,而不是引用一个拷贝。
例如:
$user = new stdClass();
$user->name = ‘gouki’;
$myUser = $user;
$myUser->name = ‘flypig’;
如果在PHP4时代,这样的代码就是在消耗系统资源。因为:
$myUser = $user;
这是创建了一个拷贝。所以,在PHP4的时候,都是这样使用:
$myUser = & $user;
但这又与数组有什么差别呢?然而数组的每次被引用($a = $b),其实都是创建了一个副本。无论如何都多占了一次内存。