2009-10-26 11 views
5

Quale sarebbe il modo corretto di esplodere un oggetto COM per il debug? Ho una funzione di terze parti che restituisce un oggetto multilivello. La documentazione è inesistente, quindi mi piacerebbe essere in grado di echoare tutto fuori dall'oggetto o eseguirne il debug nell'IDE di Komodo.Esplora un oggetto COM in PHP

Komodo dice solo Oggetto e nient'altro. Forse convertire in array?

Conosco alcune delle opzioni esistenti come $com->Status, ma ci sono più variabili restituite che mi piacerebbe sapere quali sono.

+1

Cosa var_dump()/print_r() dire? –

+1

'print_r ($ data)' restituisce 'variant Object'. 'var_dump' si arresta in modo anomalo per qualche motivo. Riflessione – shaiss

risposta

0

È strano che var_dump non abbia funzionato.

Ma si potrebbe provare con altri strumenti di riflessione php.

Reflection Class:

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

Oppure si potrebbe provare con la get_class_methods:

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

o get_object_vars per vedere i suoi campi:

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

Spero che questo aiuti.

+0

restituisce 'Class [class variant] {- Constants [0] {} - Proprietà statiche [0] {} - Static methods [0] {} - Properties [0] {} - Methods [0] {}}'. 'print_r (get_class_methods ($ data));' restituisce 'Array()'. 'print_r (get_objcet_vars ($ data));' restituisce la funzione non trovata – shaiss

+0

typo use: get_object_vars invece di: get_objcet_vars – elviejo79

+0

sfortunatamente. Grazie per le informazioni – shaiss

7

È possibile utilizzare com_print_typeinfo() anziché var_dump(). Questo dovrebbe funzionare per gli oggetti COM, VARIANT e DOTNET. L'output è simile a questo:

 
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

Questo è un po 'tardi. Ma controllerò due volte quando riprenderò questo progetto a breve. – shaiss

+0

Fai attenzione! 'com_print_typeinfo' può rendere il tuo bugcheck Apache! –

0

Il nativo var_dump() non va in crash per gli oggetti COM.

L'estensione xdebug, sostituisce la funzione nativa var_debug() e non supporta gli oggetti COM.

La soluzione sarebbe disattivare l'override della funzione var_dump() da xdebug aggiungendo xdebug.overload_var_dump = off a php.ini.

Il bug relativo a xdebug bug tracker

Problemi correlati