Pregunta

De php.net :

  

En PHP 5, esto ya no es necesario. Puede definir un __autoload () función a la que se llama automáticamente en caso de que esté intentando usar una clase / interfaz que aún no se ha definido. Al llamar a esta función, al motor de secuencias de comandos se le da la última oportunidad de cargar la clase antes de que PHP falle con un error.

Ahora quiero saber, ¿es una mala práctica usar únicamente __autoload para cargar las clases apropiadas en un sitio dinámico?

La forma en que mi sitio está configurado es incluir archivos en el archivo index.php , por ejemplo, http://www.site.com/index.php?p=PAGE-I-WANT-TO-LOAD

Entonces, si estoy en la sección de foros o en la sección de blogs de mi sitio, quiero que solo se carguen las clases y funciones apropiadas, así que uso la carga automática pero nunca incluyo un archivo manualmente, ¿debería estar usando __autoload como último recurso o ¿lo estoy haciendo bien incluso en un sistema de alto tráfico?

¿Fue útil?

Solución

malo? No. __autoload () es una de mis adiciones favoritas a PHP 5. Quita la responsabilidad (y la molestia) de tener que incluir / requerir manualmente los archivos de clase necesarios para su aplicación. Dicho esto, depende de usted como desarrollador garantizar que solo se carguen las "clases apropiadas". Esto se hace fácilmente con un esquema de nombres estructurado y una estructura de directorios. Hay muchos ejemplos en línea sobre cómo usar correctamente __autoload (), hacer una búsqueda en Google y encontrarás mucha información.

Otros consejos

La carga automática es una buena manera de cargar solo las clases que se necesitan.

En PHP 5 > = 5.1.2, la mayoría de los problemas con el antiguo __autoload () desaparecieron, gracias a spl_autoload_register () .

  

Ahora quiero saber, ¿es una mala práctica usar únicamente __autoload para cargar las clases apropiadas en un sitio dinámico?

En absoluto. Puede confiar en la carga automática, todo lo que necesita hacer es diseñar una buena convención de nomenclatura e implementar un cargador automático eficiente.

Hay un tema importante a considerar. La carga automática y Zend Guard no juegan bien juntos, porque Zend Guard tiende a cambiar el nombre de las cosas, lo que significará que la convención de nombres que decidiste usar probablemente no será la misma. Si va a utilizar Zend Guard (o cualquier otro ofuscador), lo más probable es que se vea obligado a incluir todos los archivos a mano.

Aquí hay una cita de la guía del usuario de Zend Guard:

  

Las clases de carga automática no funcionarán ya que el nombre de archivo en el disco no funcionaría   coincide con el nombre de la clase ofuscada.

El único peligro para __autoload () es si define una función de carga automática deficiente. En general, todo lo que obtendrás en términos de un impacto en el rendimiento son algunas búsquedas en el disco a medida que PHP busca los archivos correctos que contienen tus clases. Lo bueno es deshacerse de todas esas molestas llamadas de include () .

Si está preocupado por el rendimiento en este nivel, entonces ya debería estar usando un caché de código de operación como APC.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top