分解 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 错误跟踪器中的相关错误