php stdClass类的用法

stdClass是PHP的一个基类,所有的类几乎都继承这个类,所以任何时候任何地方都可以被new,可以让这个变量成为一个object。同时,这个基类又有一个特殊的地方,就是没有方法。
凡时用new stdClass()的变量,都不可能会出现$a->test()这种方式的使用

  $user = new stdClass();
  $user->id=100;
  $user->name = 'gouki';
  $myUser = $user;//在php4以前需要$myUser = & $user; 因为在那时赋值的时候相当于复制一遍而5以后就是引用的地址 
  $myUser->name = 'flypig';//为它赋值时是直接修改在其它页面也是一样
  var_dump($myUser);//object(stdClass)#1 (2) { ["id"]=> int(100) ["name"]=> string(6) "flypig" }

  所以在5以后,stdClass对象在任何地方被调用,都是引用地址型的,所以相对消耗的资源会少一点。在其它页面为它赋值时是直接修改,而不是引用一个拷贝

为什么不用数组呢?数组在程序的使用中应该是最方便的,然而数组的每次被引用($a = $b),其实都是创建了一个副本,而且,数组被unset后,还是占用了内存

1:可以取代数组

  
$a =[0=>1,1=>2,2=>3];//这个例子这一个是必须的这个数组就算没有值也要声明一个空数组否则会报警告的错误!!
$a = (object)$a;//将数组转化成对象这时由于没有class所以默认是stdClass的类的对象,任何用(object)强制转换都会得到一个stdClass的实例
$a->id = '11 ';//将值放进stdClass对象
$a->username = 'me';
print_r($a);//stdClass Object ( [0]=>1 [1] => 2 [2] => 3 [id] => 11 [username] => me )
 
从上例可以看出新建空对像却要$andy = new Andy; 而且还得先有个class Andy{}即先得有个数组或者空数组并且还得将数组转化成对象比较麻烦
下面就是简单的用法
 
  $a = new stdClass();
  $a->id = '11 ';
  $a->username = 'me';
  print_r($a);
 
多时候用这种方法取代数组的使用,只不过是换一种语法形式

用new实例化后,前面的数组和内容清空,只留下后面添加进来的,如果不实例化,stdClass将保留所有元素。  

 
  $a = array(1=>2,2=>3);
  $a = (object)$a;
  $a = new stdClass();
  $a->id = '11 ';
  $a->username = 'me';
print_r($a);//输出:stdClass Object ( [id] => 11 [username] => me ) 
 
posted @ 2016-07-26 15:16  虚无缥缈的云  阅读(958)  评论(0编辑  收藏  举报