PHP提供了一些令人印象深刻的内省设施:
堆和作用域中定义的所有变量可以被建模为一个带标签的有向图。所以举个例子,是否可能编写一些代码来给我展示Graphviz/DOT描绘的内容呢?我想象中类似于关于PHP如何管理变量的文章中的图表,或者是PHP手册页面上关于垃圾回收的图表。
get_defined_vars
, get_defined_functions
, get_defined_constants
, debug_backtrace
等等,这些本质上提供了整个程序状态的视图:栈和堆。我想知道使用这些设施是否能够获得关于程序状态完整的视图。堆和作用域中定义的所有变量可以被建模为一个带标签的有向图。所以举个例子,是否可能编写一些代码来给我展示Graphviz/DOT描绘的内容呢?我想象中类似于关于PHP如何管理变量的文章中的图表,或者是PHP手册页面上关于垃圾回收的图表。
var_dump
。我找到了这个 GDB 扩展来分析堆,但由于需要大量设置,并且是三年前编写的,可能无法正常工作,所以我还没有尝试过。 - jameshfisher$a
和$b
之间的相互引用会导致我能够无限扩展“树”。更糟糕的是,它有时候似乎会说谎。一个带有对自身的引用的数组$a
($a = []; $a['a'] =& $a;)会导致它说$a['a']
没有元素,这是不正确的(例如,我可以var_dump($a['a']['a']);
)。尽管如此,这仍然是一个有用的工具。 - jameshfishervar_dump
在遇到循环时的行为相同。 - jameshfisher