在PHP中探索COM对象

时间:2009-10-26 16:12:55

标签: php com object explode komodo

爆炸COM对象进行调试的正确方法是什么?我有一个返回多级对象的第三方函数。文档是不存在的,所以我希望能够回显对象的所有内容或在Komodo IDE中调试它。

Komodo只是说对象而已。也许转换为数组?

我知道一些现有的选项,例如$com->Status,但还有更多变量,我想知道它们是什么。

3 个答案:

答案 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反射工具。

Reflection Class

<?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()。

xdebug bug tracker

中的相关错误