爆炸COM对象进行调试的正确方法是什么?我有一个返回多级对象的第三方函数。文档是不存在的,所以我希望能够回显对象的所有内容或在Komodo IDE中调试它。
Komodo只是说对象而已。也许转换为数组?
我知道一些现有的选项,例如$com->Status
,但还有更多变量,我想知道它们是什么。
答案 0 :(得分:7)
您可以使用com_print_typeinfo()代替var_dump()。 这适用于COM,VARIANT和DOTNET对象。输出看起来类似于:
class IFile { /* GUID={C7C3F5A4-88A3-11D0-ABCB-00A0C90FFFC0} */ // some PHP-COM internal stuff ... /* DISPID=1610612736 */ function QueryInterface( /* VT_PTR [26] [in] --> ? [29] */ &$riid, /* VT_PTR [26] [out] --> VT_PTR [26] */ &$ppvObj ) { } /* DISPID=1610612737 */ /* VT_UI4 [19] */ function AddRef( ) { } // ... /* DISPID=1610678275 */ function Invoke( /* 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 ) { } // properties and methods of the COM object // ... /* DISPID=1001 */ /* VT_BSTR [8] */ /* Short name */ var $ShortName; /* DISPID=1004 */ /* VT_PTR [26] */ /* Get drive that contains file */ var $Drive; /* DISPID=1005 */ /* VT_PTR [26] */ /* Get folder that contains file */ var $ParentFolder; // ... /* DISPID=1204 */ function Move( /* VT_BSTR [8] [in] */ $Destination ) { /* Move this file */ } /* DISPID=1100 */ /* VT_PTR [26] */ function OpenAsTextStream( /* ? [29] [in] */ $IOMode, /* ? [29] [in] */ $Format ) { /* Open a file as a TextStream */ } }
答案 1 :(得分:0)
var_dump不起作用很奇怪。
但你可以试试其他的php反射工具。
<?php
Reflection::export(new ReflectionClass(get_class($data)));
?>
或者你可以试试get_class_methods:
<?php
print_r(get_class_methods($data));
?>
或get_object_vars查看其字段:
<?php
print_r(get_object_vars($data));
?>
希望这有帮助。
答案 2 :(得分:0)
COM对象的本机var_dump()
不会崩溃。
扩展名xdebug
替换了本机var_debug()函数,并且不支持COM对象。
解决方案是通过将xdebug.overload_var_dump = off添加到php.ini来停用xdebug覆盖函数var_dump()。
中的相关错误