2010-07-26 16 views
8

Tengo un script que usa autoload para cargar clases que no se encuentran. No incluyo el archivo deliberadamente (aunque puedo) pero me gustaría que la función de autocarga incluya los archivos necesarios.PHP __autoload rendimiento

Como la secuencia de comandos puede ser recursiva, es decir, si la clase ya está cargada, no quiero verificar que se haya cargado el archivo correspondiente y class_exists en cada recursión de la secuencia de comandos.

Respuesta

9

Si desea evitar __autoload, puede usar require_once en lugar de include.

El impacto en el rendimiento de usar __autoload puede ser considerable, especialmente porque algunos cachés de opcode no lo admiten correctamente. Sin embargo, dado que es muy útil, yo diría que lo use a menos que su caché de código de operación no incluya caché.

+1

No olvide que también hay 'include_once()'. – alex

+4

@alex Prefiero dirigir a las personas desde 'incluir 'a menos que sea absolutamente necesario (y muy raramente lo es). Al ser una construcción que falla más o menos silenciosamente cuando el archivo no existe, me ha robado unas horas de vida. – Artefacto

+0

@Artefacto De acuerdo, solo pensé en mencionarlo. Además, las cosas de caché de código de operación son útiles, así que +1 – alex

6

Si tiene su autocargador configurado para cargar sus clases y no está usando require (et al.) El autocargador solo se ejecutará si se hace referencia a una clase que no existe. Por lo tanto, nunca es necesario verificar class_exists en el autocargador (no se llamará si la clase existe).

Con respecto al rendimiento. Si está utilizando grandes bibliotecas, la autocarga puede ser más rápida ya que solo carga los archivos/clases que se requieren. De cualquier manera, el golpe de velocidad es bastante insignificante en mi experiencia (siempre use un caché de código de operación, como otros han mencionado).

+0

No estaba hablando sobre el uso de class_exist dentro de la carga automática ... Quise decir que si no utilizo la función de autocargado tuve que usar class_exist antes de intentar acceder a la clase, quiero decir que haría las cosas de autocarga de forma manual, que es si la clase no 't existen include some file y luego intenté de nuevo y como el script será recursivo lo estaría haciendo comprobando lo mismo incluso para las clases que ya están cargadas. – CoCoMo

Cuestiones relacionadas