Utilizzando spl_autoload () non in grado di caricare la classe
-
02-10-2019 - |
Domanda
Sto giocando intorno con la funzionalità SPL autoload e sembrano essere manca qualcosa di importante come sono attualmente in grado di farlo funzionare. Qui è il frammento di Attualmente sto usando:
// 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();
Quando ho echo get_include_path()
faccio ottenere il percorso che mi aspettavo:
// Output echo get_include_path();
.:/usr/lib/php:/usr/local/lib/php:/home/someuser/public_html/subdomains/test/includes/classes/
Tuttavia quando faccio funzionare il codice ottengo questo messaggio di errore:
Fatal error: spl_autoload () [function.spl-caricamento automatico]: Classe richiesta non potrebbe essere caricato in /home/someuser/public_html/subdomains/test/contact.php sulla linea 5
Request.class.php è sicuramente in / home / QualcheUtente / public_html / sottodomini / test / include / classes / directory.
Che cosa mi manca?
Soluzione
C'è un commento (anonimo) su http: //www.php.net/manual/en/function.spl-autoload-register.php#96804 che possono applicare al vostro problema: spl_autoload_register () non sembra di bel gioco con CamelCase, e nella vostra caso potrebbe essere cercando di trovare request.class.php invece di richiesta ...
Altri suggerimenti
Il percorso in cui la classe dovrebbe essere sembra non corrispondere al percorso stavi li aspetta. Confronta ??p>
.:/usr/lib/php:/usr/local/lib/php:/home/someuser/public_html/subdomains/test/includes/classes/
con
/home/someuser/public_html/subdomains/test/
La differenza è che la classe non è in includes/classes/
come SPL lo richiede, ma alcune directory sopra.
Ho ricevuto un messaggio di errore simile, ma il mio problema era diverso. Il mio messaggio di errore sembrava
PHP Fatal error: spl_autoload(): Class Lib\Lib\Regex could not be loaded in /dir1/dir2/lib/regex.php on line 49
Si è scoperto che ho dimenticato di rimuovere il Lib\
dal Lib\Regex
all'interno della definizione di classe Regex stessa. Ho avuto qualcosa di simile al seguente:
namespace Lib;
class Regex {
...
public static function match($pattern, $str) {
$regex = new Lib\Regex($pattern);
...
}
}