2009-10-26 13 views
5

Jaki byłby właściwy sposób eksplodowania obiektu COM w celu debugowania? Mam funkcję innej firmy, która zwraca obiekt wielopoziomowy. Dokumentacja nie istnieje, więc chciałbym móc odtworzyć wszystko z obiektu lub debugować go w Komodo IDE.Eksploracja obiektu COM w PHP

Komodo mówi tylko Obiekt i nic więcej. Może przekonwertować na tablicę?

Znam niektóre z istniejących opcji, takich jak $com->Status, ale jest więcej zwracanych zmiennych, które chciałbym wiedzieć, jakie one są.

+1

Co do var_dump()/print_r() powiedzieć? –

+1

'print_r ($ data)' zwraca 'wariant Object'. 'var_dump' powoduje awarię php z jakiegoś powodu. – shaiss

Odpowiedz

0

To dziwne, że var_dump nie działa.

Ale możesz wypróbować inne narzędzia do refleksji php.

Reflection Class:

<?php 
Reflection::export(new ReflectionClass(get_class($data))); 
?> 

Albo można spróbować z get_class_methods:

<?php 
    print_r(get_class_methods($data)); 
?> 

lub get_object_vars zobaczyć swoje pola:

<?php 
    print_r(get_object_vars($data)); 
?> 

nadzieję, że to pomaga.

+0

reflection zwraca 'Klasa [wariant klasy] {- Stałe [0] {} - Właściwości statyczne [0] {} - Metody statyczne [0] {} - Właściwości [0] {} - Metody [0] {}}'. 'print_r (get_class_methods ($ data)); zwraca' Array() '. 'print_r (get_objcet_vars ($ data));' nie zwraca funkcji return – shaiss

+0

użycie literówki: get_object_vars zamiast: get_objcet_vars – elviejo79

+0

nie ma przy tym szczęścia. Dzięki za informację – shaiss

7

Można użyć com_print_typeinfo() zamiast var_dump(). Powinno to działać w przypadku obiektów COM, VARIANT i DOTNET. Wyjście wygląda podobnie do tego:

 
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

To trochę za późno. Ale sprawdzę to podwójnie, gdy krótko wrócę do tego projektu. – shaiss

+0

Uważaj! 'com_print_typeinfo' może sprawić, że twoje błędy będą wykrywane przez Apache! –

0

Natywna var_dump() nie psuje dla obiektów COM.

Rozszerzenie xdebug, zastępuje natywną funkcję var_debug() i nie obsługuje obiektów COM.

Rozwiązaniem byłoby dezaktywacja nadpisania funkcji var_dump() przez xdebug przez dodanie xdebug.overload_var_dump = off do php.ini.

Odnośne błąd w xdebug bug tracker

Powiązane problemy