爆炸COM對象進行調試的正確方法是什麼?我有一個返回多級對象的第三方函數。這些文檔是不存在的,所以我希望能夠將所有東西都回顯出來,或者在Komodo IDE中進行調試。探索PHP中的COM對象
科莫多隻是說對象,沒有別的。也許轉換爲數組?
我知道現有的一些選項,如$com->Status
,但也有更多的變量返回的我想知道它們是什麼。
爆炸COM對象進行調試的正確方法是什麼?我有一個返回多級對象的第三方函數。這些文檔是不存在的,所以我希望能夠將所有東西都回顯出來,或者在Komodo IDE中進行調試。探索PHP中的COM對象
科莫多隻是說對象,沒有別的。也許轉換爲數組?
我知道現有的一些選項,如$com->Status
,但也有更多的變量返回的我想知道它們是什麼。
很奇怪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));
?>
希望這有助於。
reflection returns'Class [class variant] { - Constants [0] {} - Static properties [0] {} - Static methods [0] {} - Properties [0] {} - Methods [0] {}}'。 'print_r(get_class_methods($ data));'返回'Array()'。 'print_r(get_objcet_vars($ data));'返回函數未找到 – shaiss 2009-10-26 19:05:37
錯字使用:get_object_vars而不是:get_objcet_vars – elviejo79 2009-10-26 19:18:58
沒有運氣。感謝信息 – shaiss 2009-10-26 21:44:26
您可以使用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 */ } }
這有點晚。但是當我很快修改這個項目時,我會仔細檢查一下。 – shaiss 2010-06-14 20:05:15
小心! 'com_print_typeinfo'可以讓你的Apache錯誤檢查! – 2013-10-18 02:29:26
天然var_dump()
不會崩潰的COM對象。
擴展xdebug
,取代了原生var_debug()函數和不支持COM對象。
解決方法是通過將xdebug.overload_var_dump = off添加到php.ini來禁用xdebug的函數var_dump()的重寫。
,相關的bug xdebug bug tracker
什麼的var_dump()/的print_r()說什麼? – 2009-10-26 16:16:53
'print_r($ data)'返回'variant Object'。出於某種原因,'var_dump'崩潰了php。 – shaiss 2009-10-26 16:33:14