TigerZF
🌐Español

78.5. Zend_View_Abstract

Zend_View_Abstract es la clase base sobre la que se construye Zend_View; Zend_View en sí simplemente la extiende y declara una implementación concreta del método _run() (que es invocado por render()).

Muchos desarrolladores descubren que quieren extender Zend_View_Abstract para añadir funcionalidad personalizada, e inevitablemente se encuentran con problemas debido a su diseño, que incluye una serie de miembros privados. Este documento pretende explicar la razón detrás del diseño.

Zend_View es una especie de motor anti-plantillas en el sentido de que usa PHP de forma nativa para su plantillado. Como resultado, todo PHP está disponible, y los scripts de vista heredan el ámbito de su objeto invocador.

Es este último punto el que resulta relevante para las decisiones de diseño. Internamente, Zend_View::_run() hace lo siguiente:

protected function _run()
{
    include func_get_arg(0);
}

Como tal, los scripts de vista tienen acceso al objeto actual ($this), y a cualquier método o miembro de ese objeto. Dado que muchas operaciones dependen de miembros con visibilidad limitada, esto plantea un problema: los scripts de vista podrían potencialmente hacer llamadas a dichos métodos o modificar directamente propiedades críticas. Imagine un script sobrescribiendo $_path o $_file por accidente -- ¡cualquier llamada posterior a render() o a los helpers de vista se rompería!

Afortunadamente, PHP 5 tiene una respuesta a esto con sus declaraciones de visibilidad: los miembros privados no son accesibles por objetos que extienden una clase dada. Esto llevó al diseño actual: dado que Zend_View extiende Zend_View_Abstract, los scripts de vista quedan así limitados solo a los métodos y miembros protegidos o públicos de Zend_View_Abstract -- limitando efectivamente las acciones que puede realizar, y permitiéndonos proteger áreas críticas del abuso por parte de los scripts de vista.