Para comprender la autocarga en Zend Framework, primero es necesario entender la relación entre los nombres de clase y los archivos de clase.
Zend Framework ha tomado prestada una idea de PEAR,
según la cual los nombres de clase tienen una relación 1:1 con el sistema de archivos. Dicho de forma
sencilla, el carácter de subrayado ("_") se reemplaza por un separador de directorio para resolver
la ruta al archivo, y luego se añade el sufijo ".php". Por
ejemplo, la clase "Foo_Bar_Baz" correspondería a
"Foo/Bar/Baz.php" en el sistema de archivos. También se asume
que las clases pueden resolverse mediante la configuración
include_path de PHP, lo cual permite tanto a
include() como a require() encontrar
el nombre de archivo mediante una búsqueda de ruta relativa en el include_path.
Además, siguiendo tanto a PEAR como al proyecto PHP, usamos y recomendamos usar un prefijo de proveedor o de proyecto para su código. Esto significa que todas las clases que escriba compartirán un prefijo de clase común; por ejemplo, todo el código de Zend Framework tiene el prefijo "Zend_". Esta convención de nomenclatura ayuda a evitar colisiones de nombres. Dentro de Zend Framework, a menudo nos referimos a esto como el prefijo de "espacio de nombres"; hay que tener cuidado de no confundirlo con la implementación nativa de espacios de nombres de PHP.
Zend Framework sigue estas sencillas reglas internamente, y nuestros estándares de codificación recomiendan que usted haga lo mismo para todo el código de biblioteca.
El soporte de autocarga de Zend Framework, proporcionado principalmente mediante
Zend_Loader_Autoloader, tiene los siguientes objetivos y
elementos de diseño:
Proporcionar coincidencia de espacios de nombres. Si el prefijo del espacio de nombres de la clase no está en una lista de espacios de nombres registrados, devuelve
FALSEinmediatamente. Esto permite una coincidencia más optimista, así como retroceder a otros autoloaders.Permitir que el autoloader actúe como un autoloader de reserva. En el caso de que un equipo esté ampliamente distribuido, o utilice un conjunto indeterminado de prefijos de espacio de nombres, el autoloader debería seguir siendo configurable de forma que intente coincidir con cualquier prefijo de espacio de nombres. Sin embargo, cabe señalar que esta práctica no se recomienda, ya que puede provocar búsquedas innecesarias.
Permitir alternar la supresión de errores. Consideramos -- y la comunidad más amplia de PHP también -- que la supresión de errores es una mala idea. Es costosa, y enmascara problemas muy reales de la aplicación. Por eso, de forma predeterminada, debería estar desactivada. Sin embargo, si un desarrollador insiste en activarla, permitimos alternarla.
Permitir especificar callbacks personalizados para la autocarga. Algunos desarrolladores no quieren usar
Zend_Loader::loadClass()para la autocarga, pero aun así quieren aprovechar los mecanismos de Zend Framework.Zend_Loader_Autoloaderpermite especificar un callback alternativo para la autocarga.Permitir la manipulación de la cadena de callbacks de autocarga de SPL. El propósito de esto es permitir especificar autoloaders adicionales -- por ejemplo, cargadores de recursos para clases que no tienen una correspondencia 1:1 con el sistema de archivos -- para que se registren antes o después del autoloader principal de Zend Framework.