Ver Mensaje Individual
  #10 (permalink)  
Antiguo 03/11/2013, 17:10
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 guardarmicorreo Ver Mensaje
He pensado en utilizar __autoload() de manera que vaya buscando en cada carpeta partiendo desde la raíz del servidor el archivo .php que se llama igual que la clase.
Esa no es una excelente idea...Como decía en mi primer post, abrir ficheros PHP del disco es una operación muy costosa.Mucho más aún si los "buscas".
Una sugerencia: utiliza namespaces.Cuando vayas a crear una clase, según el namespace que le llegue al autoloader, debería saber exactamente el path del fichero a abrir.Pero..."buscarlo en cada carpeta"...De verdad, no quieres hacer eso.

Cita:
Iniciado por guardarmicorreo Ver Mensaje
¿para qué utilizar algo ajeno al lenguaje? [...] creo recordar que en otros lenguajes, como java, este tipo de problemas no sucede, por lo menos lo poco que recuerdo de mi iniciación en java y del que apenas se mucho.
En lenguajes donde hay una fase de compilación , y otra de "linkado", las referencias externas tienen que estar resueltas en el linkado.Y, desde luego, a Java, en tiempo de compilación/linkado, tienes que indicarle la localización de todas las dependencias externas (el equivalente a "include").
En Java (C,C++,C#,etc,etc) , en tiempo de ejecución, no se usa el código que has escrito, con la estructura de ficheros que le diste.Puedes ejecutar el programa sin el código fuente.En PHP, y lenguajes interpretados del mismo tipo, no.En tiempo de ejecución, se requiere el mismo fichero que editas, y que tienes que mantener.
Eso le permite a PHP que, para hacer un cambio, modificas el fichero, recargas la página, y listo.Eso no lo puedes hacer en Java.Tienes que pasar antes por las fases de compilación y "linkado".

Cita:
Iniciado por guardarmicorreo Ver Mensaje
¿Veis mi idea factible desde un punto de vista economista en recursos de procesamiento y universalidad?
Tal cual, no.Si haces un profiling del sistema, verás cuánto consume "buscar" el fichero php desde el autoloader.

Cita:
Iniciado por guardarmicorreo Ver Mensaje
¿A qué otras estrategias te refieres dashtrash?
Hay muchas, pero depende de cómo estructures tu desarrollo.Una rápida, que puedes comprobar, es lo que hace..creo que es...prestashop 1.5.
Lo que hace es mantener un fichero caché donde está cada clase, y qué fichero la contiene.El mantenimiento de esta caché se hace en tiempo de ejecución: se carga la caché (un array), y si no se encuentra la clase, entonces se busca.
Esto lo hace así, ya que prestashop te permite sobreescribir cualquier clase de su "core" (sean modelos o controladores).Por lo tanto, por cada modelo o controlador que quisiera cargar, su autoloader debería mirar primero si esa clase está sobreescrita por el usuario.Fíjate que en este caso, sólo se hace 1 is_file() (sobre la posible clase sobreescrita por el usuario).Eso ya ralentiza lo suficiente como para que prestashop mantenga una caché.