2009-10-26 5 views
5

Quelle serait la manière appropriée d'exploser un objet COM pour le débogage? J'ai une fonction tierce qui retourne un objet à plusieurs niveaux. La documentation est inexistante, donc j'aimerais pouvoir faire écho à tout ce qui sort de l'objet ou le déboguer dans l'IDE de Komodo.Explorer un objet COM en PHP

Komodo dit simplement Objet et rien d'autre. Peut-être convertir en tableau?

Je connais certaines des options existantes telles que $com->Status, mais il y a plus de variables retournées que j'aimerais savoir de quoi il s'agit.

+1

Que var_dump()/print_r() dire? –

+1

'print_r ($ data)' retourne 'variant Object'. 'var_dump' plante le PHP pour une raison quelconque. – shaiss

Répondre

0

Il est étrange que var_dump ne fonctionne pas.

Mais vous pouvez essayer avec d'autres outils de réflexion php.

Reflection Class:

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

Ou vous pouvez essayer avec le get_class_methods:

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

ou get_object_vars pour voir ses champs:

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

Hope this helps.

+0

réflexion renvoie 'Classe [variant de classe] {- Constantes [0] {} - Propriétés statiques [0] {} - Méthodes statiques [0] {} - Propriétés [0] {} - Méthodes [0] {}}'. 'print_r (get_class_methods ($ data));' retourne 'Array()'. 'print_r (get_objcet_vars ($ data));' renvoie la fonction non trouvée – shaiss

+0

use typo: get_object_vars au lieu de: get_objcet_vars – elviejo79

+0

pas de chance avec ça non plus. Merci pour l'info – shaiss

7

Vous pouvez utiliser com_print_typeinfo() au lieu de var_dump(). Cela devrait fonctionner pour les objets COM, VARIANT et DOTNET. La sortie ressemble à ceci:

 
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

C'est un peu tard. Mais je vais vérifier cela quand je revois ce projet sous peu. – shaiss

+0

Faites attention! 'com_print_typeinfo' peut rendre votre Apache bugcheck! –

0

Le var_dump() natif ne tombe pas en panne pour les objets COM.

L'extension xdebug remplace la fonction native var_debug() et ne prend pas en charge les objets COM.

La solution serait de désactiver le remplacement de la fonction var_dump() par xdebug en ajoutant xdebug.overload_var_dump = off à php.ini.

Le bug lié à xdebug bug tracker

Questions connexes