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?

È stato utile?

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

.:/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);

      ...
   }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top