这是我用来在下面得出推断的代码及其输出:
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>。哪里,
#<some-number>
object(someClass)
var_dump
#<count>
count是 对象的对象 数/ zval的对象 数,与迄今为止创建的属于哪个类 无关 。当zval的引用计数达到零(即垃圾回收)时,对于创建的每个对象,它都会不断增加,并减少1。
我对吗?
这个数字是Z_OBJ_HANDLE_PP(struc)哪里struc是zval导致Z_OBJVAL(zval).handle导致(zval).value.obj。
Z_OBJ_HANDLE_PP(struc)
struc
zval
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);
而不是曾经创建过的对象的数量。