Pregunta

Estoy jugando un poco con la funcionalidad de carga automática SPL y parecen estar perdiendo algo importante ya que soy actualmente incapaz de conseguir que funcione. Aquí está el fragmento que estoy usando actualmente:

// ROOT_DIRECTORY translates to /home/someuser/public_html/subdomains/test
define('ROOT_DIRECTORY', realpath(dirname(__FILE__)));
define('INCLUDE_DIRECTORY', ROOT_DIRECTORY . '/includes/classes/');
set_include_path(get_include_path() . PATH_SEPARATOR . INCLUDE_DIRECTORY);
spl_autoload_extensions('.class.php, .interface.php, .abstract.php');
spl_autoload_register();

Cuando echo get_include_path() hago obtener la ruta que esperaba:

// Output echo get_include_path();
.:/usr/lib/php:/usr/local/lib/php:/home/someuser/public_html/subdomains/test/includes/classes/

Sin embargo, cuando ejecuto el código me sale este mensaje de error:

error fatal: spl_autoload () [function.spl-carga automática] Solicitud de clase no se pudo cargar en /home/someuser/public_html/subdomains/test/contact.php en la línea 5

Request.class.php es definitivamente en el directorio / home / someuser / public_html / subdominios / test / includes / classes /.

¿Qué me falta?

¿Fue útil?

Solución

Hay un comentario (anónimo) en http: //www.php.net/manual/en/function.spl-autoload-register.php#96804 que pueden aplicarse a su problema: spl_autoload_register () no parece jugar agradable con CamelCase, y en su caso podría estar tratando de encontrar request.class.php en lugar de Solicitud ...

Otros consejos

La ruta donde se supone que la clase que parece no coincidir con la ruta estabas lo espera. Comparar

.:/usr/lib/php:/usr/local/lib/php:/home/someuser/public_html/subdomains/test/includes/classes/

con

/home/someuser/public_html/subdomains/test/

La diferencia es, que su clase no está en includes/classes/ como su SPL lo requiere, pero algunos directorios anteriormente.

He recibido un mensaje de error similar pero mi problema era diferente. Mi mensaje de error se ve como

PHP Fatal error:  spl_autoload(): Class Lib\Lib\Regex could not be loaded in /dir1/dir2/lib/regex.php on line 49

Resultó me olvidó quitar el Lib\ de Lib\Regex dentro de la propia definición de la clase Regex. Tenía algo como lo siguiente:

namespace Lib;

class Regex {

...

   public static function match($pattern, $str) {

      $regex = new Lib\Regex($pattern);

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