Ver Mensaje Individual
  #15 (permalink)  
Antiguo 03/11/2013, 18:55
Avatar de dashtrash
dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años, 7 meses
Puntos: 270
Respuesta: ¿__autoload dentro o fuera de la clase?

Cita:
Iniciado por pateketrueke Ver Mensaje
No, eso no está definido en dicho estańdar,
Cita:
Each namespace separator is converted to a DIRECTORY_SEPARATOR when loading from the file system.
Si el path de mi fichero es Backoffice/objects/Almacen/objects/private/Caja, su namespace debería ser ese.
Y que el path del fichero sea ese, no es casual.Backoffice tiene más cosas que objetos (configuraciones, caches,etc).Almacen tiene más cosas que objetos (vistas, controladores, datasources,generadores,etc).
Mi código es mucho más legible escribiendo Backoffice\Almacen\Caja. El hacer que los namespaces coincidan con los paths no siempre ayuda.
Cita:
Iniciado por pateketrueke Ver Mensaje
Al caso debo mencionar que todavía no he visto un ejemplo complejo de dependencias (de clases obviamente) que no se pueda resolver usando PSR-0 (autoload), si tienes alguno sería interesante revisarlo.
En general, cualquier sistema basado en "plugins".
En particular, un sistema donde quieras, por ejemplo, que un usuario pueda sobreescribir un controlador (el ejemplo que daba antes de prestashop).
Una forma sencilla de hacerlo:

Controlador base:
Código PHP:
Ver original
  1. namespace base\Controllers;
  2. class MyController
  3. {
  4.     function a(){ echo "BASE";}
  5. }

Controlador sobreescrito por el usuario:
Código PHP:
Ver original
  1. namespace user\Controllers;
  2. class MyController extends \base\Controllers;
  3. {
  4.     function a(){ echo "USER"; }
  5. }

Instanciación del controlador:
Código PHP:
Ver original
  1. $controller=new \run\MyController();
No existe ninguna clase "run\MyController", ni directorio "run".Pero, examinando el namespace pedido, el autoloader puede comprobar si existe user\MyController, y si no, devolver base\MyController.

Variaciones de este caso de uso existe en casi cualquier "aplicación prefabricada".