Conociendo el contexto de un objeto en Php

Por lo general, si formamos parte de un desarrollo desde el comienzo, nos es bastante fácil tener noción de la arquitectura completa.

Existen otros casos, en los cuales llegamos con la arquitectura ya definida, pero la documentación se encarga de tapar esos baches con los cuales uno se topa.

El otro escenario posible, es la razón de ser de éste post.

Supongamos que estamos ante una aplicación en la cuál no tuvimos nada que ver con su arquitectura, y para rematarla, no tenemos documentación que pueda consultarse.

Si a esto le sumamos algunas cuestiones relacionadas con la complejidad del código y el grado de abstracción que pueda presentar, se nos pueden complicar un poco las tareas diarias.

En mi caso, la aplicación que se ajusta a éste último esquema, es Magento.

Para los que ya han visto algo del código de ésta aplicación, en particular la capa de plantillas que utiliza, entenderán mejor hacia dónde apunto con conocer el contexto de un objeto.

Cada vez que abrimos uno de los bloques de plantillas, solemos encontrarnos con algo como esto.

echo $this->getFormAction();

La primer pregunta que uno se hace es: ¿quién es $this?.

Bien, para saber de qué clase se trata, vamos a usar una función Php para saber con quién estamos lidiando.

Voy a tomar como ejemplo, el formulario de contacto de Magento. Abrimos el archivo form.phtml, y vamos a agregar lo siguiente antes de la apertura del formulario.

print_r(get_class($this));

La función get_class, nos devuelve el nombre de la clase instanciada. En este caso, se trata de la clase Mage_Core_Block_Template.

Lo segundo que podemos probar para ubicarnos mejor, es buscar las clases de las que hereda nuestro actual objeto.

Para eso, volvemos a recurrir a otra función nativa, llamada class_parents.

En la plantilla del formulario, lo aplicaríamos de la siguiente forma.

print_r(class_parents($this));

El resultado de ésta llamada nos devuelve un array con las clases de las cuales hereda nuestro objeto.

Array
(
    [Mage_Core_Block_Abstract] => Mage_Core_Block_Abstract
    [Varien_Object] => Varien_Object
)

Como pueden ver, con el uso de estas dos funciones, se nos simplifica significativamente conocer el contexto de un objeto.