php中使用var_dump打印一个对象的时候,其输出包括对象名,对象包含的成员变量(成员变量个数),以及一个“#序号”。像这样:
object(B)表示这个对象是一个类名为B的实例;(2)表示这个对象内部有2个成员变量,分别是’name’与’age’;但#2代表什么呢?
其实我个人感觉(我并没有找到确切的说明文档,这估计得去看看php内核了),php中新建一个对象(不包括int、string、array这些基本类型的实例)的时候,会将该对象放在某个内核数组中。而var_dump出来的这个#序号,就表示该对象在这个php内核数组中序号。不过这序号并不能代表该对象是第几个被创建的,举个例子:
<?php class A { public $name; } class B { public $name; public $age; } // #1,此时内核中的对象数组长度为1 $obj1 = new A; $obj1->name = 'obj1'; var_dump($obj1); // #2,对象数组长度为2 $obj2 = new B; $obj2->name = 'obj2'; var_dump($obj2); // #3,临时对象,创建完后由于没有赋给某个变量,就销毁了,所以后面新建的对象仍为#3 var_dump(new stdClass()); // #3,临时对象,创建完后就销毁 var_dump(new A); // #3 $obj3 = new stdClass; var_dump($obj3); // 释放$obj2对象,对象数组中2的位置空余出来了。 unset($obj2); // #3,$obj3仍在序号3的位置 var_dump($obj3); // #2,新建的对象放入之前空余的位置。 $obj_x = new A; $obj_x->name = 'obj_x'; var_dump($obj_x); exit();
上面代码打印出来的结果: