【问题标题】:Question about var_dump output关于 var_dump 输出的问题
【发布时间】: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)是什么意思?

【问题讨论】:

    标签: php object var-dump


    【解决方案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。仍然有一个非常活泼的表现。另外,非常感谢您非常详细的回答!
    猜你喜欢
    • 2015-03-15
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2014-11-05
    相关资源
    最近更新 更多