Pregunta

Estoy notando que la adición de la ruta de inclusión de una necesidad carpeta que no es suficiente para acceder a las clases.

Tengo una carpeta de aplicaciones / pruebas / que contiene la aplicación / pruebas / Test.php

Test.php clase se denomina prueba sin ningún tipo de prefijos

class Test {

}

Si añado las pruebas carpeta sólo en la ruta de inclusión

realpath(APPLICATION_PATH . '/tests')

La clase Test.php no funciona en los controladores

new Test()

por lo que no está incluida en la carpeta en la ruta de inclusión suficiente?

¿Fue útil?

Solución

@StasM tiene razón. Pero aquí hay un poco más de explicación.

El include_path le dice a PHP dónde mirar cuando se ejecuta una include, un include_once, un require, o una require_once. Por supuesto, estos includes y requires siempre referencia a un archivo en particular .

La carga automática es específicamente sobre los desaparecidos clases . Cuando se hace referencia a una clase, que aún no cargado en el código - por lo general, aunque no exclusivamente, mediante la invocación del operador new, como en el ejemplo - a continuación, autoloading es un proceso que puede patear con un algoritmo para la carga de la clase. Este proceso implica típicamente a partir del nombre de la clase que falta y producir una colección de posibles nombres de ruta - ya sea absoluta en el sistema de ficheros o en relación con las entradas en la include_path - desde el nombre de la clase que falta y luego haciendo la realización de una include en la esperanza de que la definición de clase reside en uno de ellos.

En su caso, se han convocado a una clase llamada "prueba". El archivo que contiene esta clase reside en el APPLICATION_PATH . 'tests/Test.php' archivo. Y se ha colocado el APPLICATION_PATH . 'tests' directorio en el include_path. Pero hasta que no haya un algoritmo de carga automática en su lugar, no hay manera para que el sistema para conectar el nombre de la clase 'Test' al nombre del archivo 'Test.php'.

El PERA de estilo nombre de la clase de convenciones proporcionaría esta conexión. Y un cargador automático que emplea esa convención - al igual que el cargador automático por defecto Zend Framework -. Sería capaz de realizar esa asignación de nombre de clase a nombre de archivo, y luego include el archivo requerido

Como una complicación final, los lugares convencionales de Zend Framework convenciones disposición de directorios ciertas clases en las carpetas que son no en la ruta de inclusión: modelos, formas, servicios, controladores, ayudantes de vista, ayudantes de acción, etc. . es por eso que a menudo se pueden ver más de configuración del cargador automático - por lo general en la clase Bootstrap - definir un mapeo entre ciertos nombres de las clases y ciertos lugares en el sistema de archivos que son de el include_path.

Por ejemplo, una clase llamada fuerza 'Default_Model_User' - se espera que residen en el include_path en un archivo 'Default/Model/User.php' - a primera vista. Sin embargo, la estructura de directorios de aplicaciones estándar quiere colocar ese archivo en 'application / modelos / User.php'. Tenga en cuenta el plural 'modelos' y la minúscula 'm' en el nombre de la ruta, así como la presencia de "defecto" en el nombre de la clase. Se requiere configuración adicional en el cargador automático con el fin de dar sentido a eso, el proporcionar un patrón para la asignación de nombre de clase-a-nombre de archivo. Esto se logra generalmente con un cargador automático de recursos .

La esperanza alguna de que esta ayuda, ya sea usted o algún otro. Saludos!

Otros consejos

Incluir Muestra la ruta donde PHP buscaría secuencias de comandos que se trata de incluir - de manera que cuando se dice motor de PHP include('blah.php') buscaría blah.php en todos los caminos de la ruta de inclusión.

La carga automática es la funcionalidad que permite cierta función que se llamará cuando PHP detecta que se necesita la clase pero no se define. En esta función, se puede utilizar la ruta de inclusión para encontrar el archivo que contiene la clase y cargarlo, pero estas son cosas absolutamente diferentes.

realpath() no está relacionado con ninguna de esas y es una función que retorna camino único sistema de archivos de un archivo determinado, con cosas como .. y enlaces simbólicos resueltos.

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