关于var_dump输出的#号

php中使用var_dump打印一个对象的时候,其输出包括对象名,对象包含的成员变量(成员变量个数),以及一个“#序号”。像这样:

屏幕快照 2016-06-25 下午9.01.01

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();

上面代码打印出来的结果:

屏幕快照 2016-06-25 下午9.48.16

 

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top