一尘不染

什么是 #在对象的var_dump中的object(someClass)旁边?我有一个推断。我对吗?

php

这是我用来在下面得出推断的代码及其输出:

 class a {
    public $var1;
    public $var2;
    }

 $obj0 = new a;
 var_dump($obj0);

 class b {
    public $var1;
    public $var2;
    public $var3;
    }

 $obj1 = new b;
 var_dump($obj1);

 $obj2 = new stdClass;
 var_dump($obj2);

 $obj3 = new stdClass;
 var_dump($obj3);

 $obj4 = new stdClass;
 var_dump($obj4);

 $obj5 = new stdClass;
 var_dump($obj5);

 var_dump(new stdClass);

 $obj6 = new stdClass;
 var_dump($obj6);

输出:

object(a)#1 (2) {
  ["var1"]=> NULL
  ["var2"]=> NULL
}
object(b)#2 (3) {
  ["var1"]=> NULL
  ["var2"]=> NULL
  ["var3"]=> NULL
}
object(stdClass)#3 (0) {

}
object(stdClass)#4 (0) {

}
object(stdClass)#5 (0) {

}
object(stdClass)#6 (0) {

}
object(stdClass)#7 (0) {

}
object(stdClass)#7 (0) {

}

#<some-number>该线旁object(someClass)var_dump对象实际上是#<count>。哪里,

count是 对象的对象 数/ zval的对象 数,与迄今为止创建的属于哪个类 无关
。当zval的引用计数达到零(即垃圾回收)时,对于创建的每个对象,它都会不断增加,并减少1。

我对吗?


阅读 315

收藏
2020-05-29

共1个答案

一尘不染

这个数字是Z_OBJ_HANDLE_PP(struc)哪里struczval导致Z_OBJVAL(zval).handle导致(zval).value.obj

另请参见http://php.net/manual/zh/internals2.variables.intro.php

简而言之,我想说的是以十进制形式(ref)编写的对象标识符

php_printf("%sobject(%s)#%d (%d) {\n", COMMON, class_name, Z_OBJ_HANDLE_PP(struc), myht ? zend_hash_num_elements(myht) : 0);

而不是曾经创建过的对象的数量。

2020-05-29