在PHP中探索COM对象

sha*_*iss 5 php com object komodo explode

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

科莫多只是说对象而已.也许转换为数组?

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

fir*_*sel 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 */
 }
}


elv*_*o79 0

奇怪的是 var_dump 不起作用。

但你可以尝试使用其他 php 反射工具。

反射类

<?php
Reflection::export(new ReflectionClass(get_class($data)));
?>
Run Code Online (Sandbox Code Playgroud)

或者您可以尝试使用get_class_methods

<?php
  print_r(get_class_methods($data));
?>
Run Code Online (Sandbox Code Playgroud)

get_object_vars查看其字段:

<?php
  print_r(get_object_vars($data));
?>
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。