Encontrar donde se define una clase usando el nombre de la clase

En un proyecto en el que me encuentro trabajando surgió la necesidad de implementar un módulo para OAuth, tenía que bajar el módulo y comenzar a usarlo. Cuando quiero comenzar a usarlo me salta un error que la clase OAuthException ya había sido declarada previamente.

Lo primero que se me vino a la mente es que el archivo que tenía la clase estaba siendo incluido mas de una vez, cuando me pongo a debuggear no era el caso, el archivo no estaba siendo incluido mas de una vez.

Lo segundo que pienso es que la clase estaba definida en algún otro módulo, así que grepeo todo el fuente del proyecto para buscar la definición de la clase en otro lado, el resultado fue que no había otra definición, solo la del módulo que acababa de instalar.

Después de mucho buscar y buscar, se me vino a la mente de buscar donde estaba el archivo en función del nombre de la clase, googleando un poco me encontré en stackoverflow con la clase ReflectionClass la cual posee varios métodos interesantes, entre ellos el método getFileName, este a partir del string con el nombre de la clase devuelve el path al archivo donde la clase fue definida. Aquí un ejemplo

$reflector = new ReflectionClass('Foo');
echo $reflector->getFileName();

Ya estamos dije yo, cuando corro esto para ver que me decía mi sorpresa vino de que este me devolvía vacío. Pensando un poco mas me doy cuenta que si la clase es parte de una extensión o nativa de PHP difícilmente este en un archivo, así me encontré con este otro método de la misma clase, isInternal, el cual me dio verdadero.

Con eso me saque la duda de donde venía la clase, el paso siguiente fue revisar mi lista de extensiones y me encontré con que tenía una extensión pecl para oauth (la cual instalé para otro proyecto hace bastante) y la misma definía una clase con el mismo nombre, algo que no debería pasar en las nuevas versiones de PHP si usamos espacios de nombre.

Para solucionarlo desactive la extensión y seguí codeando.

 

Share

Js Debugging con Internet Explorer

Siguiendo con el tema debugging de JavaScript, ahora llego el turno de Internet Explorer, después de varios días de tortura, dado que sufro cada vez que tengo que usar algo de Microsoft, encontré un conjunto de herramientas que me ayudaron a realizar el trabajo de debuggear sobre Internet Explorer.

La versión de IE con la que mejor pude realizar el trabajo es IE8, 7 y 6 carecen de herramientas para realizar este trabajo de una manera sencilla, pero con IE8 podes acercarte bastante a que funcione en IE7 …. IE6 es un mundo aparte, hoy en día no funciona casi nada en dicho navegador. IE8 cuenta con una herramienta para desarrollo web muy similar a Firebug pero no idéntica, esta herramienta posee un visor del DOM, visor de CSS, visor de Scripts, y una consola para debbuging compatible con la consola de Firebug (log, warn, error, etc).

Lo que no posee esta herramienta es un monitor de Red pero eso lo podemos complementar con otra herramienta llamada Friddle.

Adicionalmente tambien podemos instalar DebugBar que viene al pelo para ver el DOM y CSS, tambien posee monitor HTTP.

Me recomendaron tambien VS 2010 Expresss para realizar el debugging, pero no la alcanzé a probar, en realidad no me animo, a ver si todavía me gusta :P.

Para probar en las diferentes versiones de IE pueden usar IETester, emula todas las versiones de IE, muy piola la herramienta.

Aqui la lista de Herramientas y Links

IE Tester http://www.my-debugbar.com/wiki/IETester/HomePage
Debug Bar http://www.debugbar.com/?langage=en
Fiddler2 http://www.fiddler2.com/fiddler2/
Web Development Helper  http://www.nikhilk.net/

Y aqui unos links a algunos Docs

http://msdn.microsoft.com/en-us/library/dd565628(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/dd565625(v=vs.85).aspx

http://www.developertipoftheday.com/2010/12/output-to-built-in-ie-developer-console.html

http://msdn.microsoft.com/en-us/library/dd565622(v=VS.85).aspx

Share