关于 var_dump 输出的问题

Posted

技术标签:

【中文标题】关于 var_dump 输出的问题【英文标题】:Question about var_dump output 【发布时间】:2011-04-15 07:58:15 【问题描述】:

当我var_dump一个对象时,输出如下:

object(XCTemplate)#2477 (4) 
  ["id"]=>
  string(1) "1"
  ["attributes"]=>
  array(0) 
  
  ["db_table_name"]=>
  string(14) "template_names"
  ["cache"]=>
  array(0) 
  

XCTemplate 当然是它的类,但是# 后面的整数(这里:2477)是什么意思?

【问题讨论】:

【参考方案1】:

这是与 XCTemplate 的特定实例相关联的唯一 ID。 AFAIK 这没有记录,也没有办法得到它(除了使用var_dump());我看过Reflection 类。

据我所知:

ID 对于每个实例都是唯一的;从 1 开始,每个新对象加 1。这包括每个对象;他们不必属于同一类。 销毁实例(例如:通过unset)会释放其 id,并且下一个实例化对象可以(并且将)使用它。

与变量无关;例如:

$foo = new Foo();
var_dump($foo);
$foo = new Foo();
var_dump($foo);

将为不同的实例生成不同的 id。

和资源id一样,你可以直接转换成int来获取id:

$resource= curl_init();      
var_dump($resource);       // resource #1 of type curl
print(intval($resource));  // 1
print((int) $resource);    // 1

【讨论】:

要添加,在每次实例化时,这个数字都会增加。如果一个实例被删除(未设置),那么该实例的 # 将被重新用于下一个实例。 另外,它不是特定类的实例ID,而是任何类的实例ID。 这是否意味着在整个脚本中已经初始化了 2477 个对象? :O @Daniel 是的,看起来就是这样。您使用的是繁重的框架吗? 我愿意,它大量使用了 MVC。仍然有一个非常活泼的表现。另外,非常感谢您非常详细的回答!

以上是关于关于 var_dump 输出的问题的主要内容,如果未能解决你的问题,请参考以下文章

PHP var_dump() 函数

php中var_dump()函数

PHP调试时print_r ,var_dump的区别

var_dump() 格式化输出 | 显示不全

如何格式化 var_dump 的输出以用作变量? [复制]

PHP 的替代 var_dump 允许限制嵌套数组的深度