2009-10-26 8 views
5

デバッグのためにCOMオブジェクトを爆発させる適切な方法は何でしょうか?私はマルチレベルオブジェクトを返すサードパーティ関数を持っています。ドキュメントは存在しないので、私はオブジェクトからすべてをエコーするか、Komodo IDEでデバッグしたいと思います。PHPのCOMオブジェクトを探る

コモドはただオブジェクトと何も言わない。多分配列に変換しますか?

私は$com->Statusのような既存のオプションのいくつかを知っていますが、それらが何であるか知りたいという変数が戻ってきています。

+1

の関連バグ()/ますprint_r()と言いますか? –

+1

'print_r($ data)'は 'Variant Object'を返します。 'var_dump'は何らかの理由でPHPをクラッシュさせます。 – shaiss

答えて

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)); 
?> 

は、この情報がお役に立てば幸いです。

+0

reflectionは 'Class [class variant] { - Constants [0] {}を返す。静的プロパティ[0] {} - 静的メソッド[0] {} - プロパティ[0] {} - メソッド[0] {}}'。 'print_r(get_class_methods($ data));'は 'Array()'を返します。 'print_r(get_objcet_vars($ data));'関数が見つからないので返す – shaiss

+0

typo use:get_object_varsの代わりに:get_objcet_vars – elviejo79

+0

これは不運です。インフォメーションありがとう – shaiss

7

var_dump()の代わりにcom_print_typeinfo()を使用できます。 これは、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 */ 
} 
} 
+0

これは少し遅れています。しかし私はすぐにこのプロジェクトを改革するときにこれを再確認します。 – shaiss

+0

注意してください! 'com_print_typeinfo'はあなたのApacheのバグチェックをすることができます! –

0

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

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

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

のvar_dumpする内容xdebug bug tracker

関連する問題