分解 COM 对象以进行调试的正确方法是什么?我有一个返回多级对象的第 3 方函数。该文档不存在,因此我希望能够从对象中回显所有内容或在 Komodo IDE 中对其进行调试。
Komodo 只说 Object,没有别的。也许转换为数组?
我知道一些现有的选项,例如$com->Status,但有更多的变量返回,我想知道它们是什么。
您可以使用com_print_typeinfo()代替 var_dump()。这应该适用于 COM、VARIANT 和 DOTNET 对象。输出类似于:
类 IFile { /* GUID={C7C3F5A4-88A3-11D0-ABCB-00A0C90FFFC0} */
// 一些 PHP-COM 内部的东西 ...
/* 分配=1610612736 */
函数查询接口(
/* VT_PTR [26] [in] --> ? [29] */ &$riid,
/* VT_PTR [26] [out] --> VT_PTR [26] */ &$ppvObj
)
{
}
/* 分配=1610612737 */
/* VT_UI4 [19] */
函数添加引用(
)
{
}
// ...
/* 分配=1610678275 */
函数调用(
/* VT_I4 [3] [in] */ $dispidMember,
/* VT_PTR [26] [in] --> ? [29] */ &$riid,
/* VT_UI4 [19] [in] */ $lcid,
/* VT_UI2 [18] [in] */ $wFlags,
/* VT_PTR [26] [in] --> ? [29] */ &$pdispparams,
/* VT_PTR [26] [out] --> VT_VARIANT [12] */ &$pvarResult,
/* VT_PTR [26] [out] --> ? [29] */ &$pexcepinfo,
/* VT_PTR [26] [out] --> VT_UINT [23] */ &$puArgErr
)
{
}
// COM 对象的属性和方法
// ...
/* 分配=1001 */
/* VT_BSTR [8] */
/* 简称 */
变种$短名称;
/* 分配=1004 */
/* VT_PTR [26] */
/* 获取包含文件的驱动器 */
变量$驱动器;
/* 分配=1005 */
/* VT_PTR [26] */
/* 获取包含文件的文件夹 */
var $父文件夹;
// ...
/* 分配=1204 */
函数移动(
/* VT_BSTR [8] [in] */ $Destination
)
{
/* 移动这个文件 */
}
/* 分配=1100 */
/* VT_PTR [26] */
函数 OpenAsTextStream(
/* ? [29] [输入] */ $IOMode,
/* ? [29] [输入] */ $格式
)
{
/* 以 TextStream 形式打开文件 */
}
}
It is weird that var_dump didn't work.
But you could try with other of php reflection tools.
<?php
Reflection::export(new ReflectionClass(get_class($data)));
?>
Or you could try with the get_class_methods:
<?php
print_r(get_class_methods($data));
?>
or get_object_vars to see its fields:
<?php
print_r(get_object_vars($data));
?>
Hope this helps.
本机var_dump()不会因 COM 对象而崩溃。
扩展xdebug,替换原生 var_debug() 函数并且不支持 COM 对象。
解决方案是通过将 xdebug.overload_var_dump=off 添加到 php.ini 来停用 xdebug 对函数 var_dump() 的覆盖。
xdebug 错误跟踪器中的相关错误