Quindi, ho xampp. Ho testato questo codice su ZendServer, risultato lo stesso.
<?php error_reporting(E_ALL); define ("ABS_PATH", 'C:\xampp\htdocs\oopHotLine\\'); function __autoload($class_name) { echo 'gg'; require_once (ABS_PATH.'classs\\'.$class_name.'.php'); } $process=new Main('1'); ?>
dopo php.exe -a index.php ho questo:
Interactive mode enabled Fatal error: Class 'Main' not found in C:\xampp\htdocs\oopHotLine\index.php on line 10 [Finished]
quindi, non mostra l'output 'gg'. Se eseguo manualmente __autoload ('Main'); – tutto ok. Lo stesso per il manuale require_once o include. Tutte le autorizzazioni nella cartella Windows sono impostate su accesso completo. Versione PHP – Versione PHP => 5.3.8;
Per favore aiuto.
Come DaveRandom ha indicato:
Autoloading is not available if using PHP in CLI interactive mode.
Quindi, invece di usare php.exe -a index.php
, taglia -a
off e prova a eseguire lo script con php.exe index.php
.
Note del manuale PHP su questo argomento, che potrebbero essere rilevanti:
A giudicare dal primo messaggio registrato, questa è probabilmente la risposta:
L'autoloading non è disponibile se si utilizza PHP in modalità intertriggers CLI.
…ma anche:
spl_autoload_register () fornisce un'alternativa più flessibile per il caricamento automatico delle classi. Per questo motivo, l'utilizzo di __autoload () è sconsigliato e potrebbe essere deprecato o rimosso in futuro.
A parte questo, ecco come scriverò la tua function autoload:
function __autoload($class_name) { if (file_exists(ABS_PATH."classs/$class_name.php")) { // At least check the file exists before you require it! // Forward slashes work on Windows too (in PHP at least)... and they make it more portble require_once (ABS_PATH."classs/$class_name.php"); } }
http://www.php.net/manual/en/function.spl-autoload-register.php
Se il tuo codice ha una function __autoload esistente, questa function deve essere esplicitamente registrata nello stack __autoload. Questo perché spl_autoload_register () sostituirà efficacemente la cache del motore per la function __autoload con spl_autoload () o spl_autoload_call ().