2009-10-26 21 views
5

¿Cuál sería la forma correcta de explotar un objeto COM para la depuración? Tengo una función de terceros que devuelve un objeto de varios niveles. La documentación es inexistente, por lo que me gustaría poder hacer eco de todo en el objeto o depurarlo en Komodo IDE.Explore un objeto COM en PHP

Komodo solo dice Objeto y nada más. ¿Tal vez convertir a matriz?

Conozco algunas de las opciones existentes, como $com->Status, pero me devuelven más variables que me gustaría saber cuáles son.

+1

Qué var_dump()/print_r() decir? –

+1

'print_r ($ data)' devuelve 'Variant Object'. 'var_dump' bloquea php por alguna razón. – shaiss

Respuesta

0

Es extraño que var_dump no funcionó.

Pero podría probar con otras herramientas de reflexión php.

Reflection Class:

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

O usted podría intentar con el get_class_methods:

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

o get_object_vars para ver sus campos:

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

Espero que esto ayude.

+0

reflexión devuelve 'Clase [variante de clase] {- Constantes [0] {} - Propiedades estáticas [0] {} - Métodos estáticos [0] {} - Propiedades [0] {} - Métodos [0] {}}'. 'print_r (get_class_methods ($ data));' devuelve 'Array()'. 'print_r (get_objcet_vars ($ data));' devuelve la función no encontrada – shaiss

+0

typo use: get_object_vars en lugar de: get_objcet_vars – elviejo79

+0

sin suerte con eso tampoco. Gracias por la información – shaiss

7

Puede usar com_print_typeinfo() en lugar de var_dump(). Esto debería funcionar para objetos COM, VARIANT y DOTNET. La salida es similar a esto:

 
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

Esto es un poco tarde. Pero verificaré esto una vez que revivo este proyecto en breve. – shaiss

+0

¡Ten cuidado! 'com_print_typeinfo' puede hacer su comprobación de errores Apache! –

0

El nativo var_dump() no se cuelga de objetos COM.

La extensión xdebug reemplaza la función nativa var_debug() y no admite objetos COM.

La solución sería desactivar la anulación de la función var_dump() por xdebug añadiendo xdebug.overload_var_dump = off a php.ini.

El error relacionado en xdebug bug tracker