5

デバッグのために COM オブジェクトを分解する適切な方法は何ですか? マルチレベル オブジェクトを返すサードパーティ関数があります。ドキュメントは存在しないので、オブジェクトからすべてをエコーするか、Komodo IDE でデバッグできるようにしたいと考えています。

Komodo は Object と言うだけで、他には何も言いません。多分配列に変換しますか?

などの既存のオプションのいくつかは知っていますが$com->Status、返される変数が他にもあり、それらが何であるかを知りたいです。

4

3 に答える 3

7

var_dump() の代わりにcom_print_typeinfo()を使用できます。これは、COM、VARIANT、および DOTNET オブジェクトで機能するはずです。出力は次のようになります。

class IFile { /* GUID={C7C3F5A4-88A3-11D0-ABCB-00A0C90FFFC0} */

// PHP-COM 内部のもの ...

 /* DISPID=1610612736 */
 関数 QueryInterface(
  /* VT_PTR [26] [で] --> ? [29] */ &$riid,
  /* VT_PTR [26] [アウト] --> VT_PTR [26] */ &$ppvObj
  )
 {
 }
 /* DISPID=1610612737 */
 /* VT_UI4 [19] */
 関数 AddRef(
  )
 {
 }

// ...
 /* DISPID=1610678275 */
 関数呼び出し(
  /* VT_I4 [3] [in] */ $dispidMember,
  /* VT_PTR [26] [で] --> ? [29] */ &$riid,
  /* VT_UI4 [19] [in] */ $lcid,
  /* VT_UI2 [18] [in] */ $wFlags,
  /* VT_PTR [26] [で] --> ? [29] */ &$pdispparams,
  /* VT_PTR [26] [out] --> VT_VARIANT [12] */ &$pvarResult,
  /* VT_PTR [26] [アウト] --> ? [29] */ &$pexepinfo,
  /* VT_PTR [26] [out] --> VT_UINT [23] */ &$puArgErr
  )
 {
 }

// COM オブジェクトのプロパティとメソッド
// ...

 /* DISPID=1001 */
 /* VT_BSTR [8] */
 /* 短い名前 */
 var $ShortName;

 /* DISPID=1004 */
 /* VT_PTR [26] */
 /* ファイルを含むドライブを取得します */
 var $ドライブ;

 /* DISPID=1005 */
 /* VT_PTR [26] */
 /* ファイルを含むフォルダーを取得します */
 var $ParentFolder;


// ...

 /* DISPID=1204 */
 関数移動(
  /* VT_BSTR [8] [in] */ $Destination
  )
 {
  /* このファイルを移動します */
 }
 /* DISPID=1100 */
 /* VT_PTR [26] */
 関数 OpenAsTextStream(
  /* ? [29] [in] */ $IOMode,
  /* ? [29] [in] */ $Format
  )
 {
  /* ファイルを TextStream として開く */
 }
}
于 2010-05-14T19:30:12.410 に答える
0

COM オブジェクトのネイティブvar_dump()はクラッシュしません。

拡張機能xdebugは、ネイティブの var_debug() 関数を置き換え、COM オブジェクトをサポートしません。

解決策は、php.ini に xdebug.overload_var_dump=off を追加して、xdebug による関数 var_dump() のオーバーライドを無効にすることです。

xdebugバグトラッカーの関連バグ

于 2014-12-17T11:19:07.987 に答える
0

It is weird that var_dump didn't work.

But you could try with other of php reflection tools.

Reflection Class:

<?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.

于 2009-10-26T18:40:04.443 に答える