Итак, у меня есть xampp. Я протестировал этот код на ZendServer, получим то же самое.
<?php error_reporting(E_ALL); define ("ABS_PATH", 'C:\xampp\htdocs\oopHotLine\\'); function __autoload($class_name) { echo 'gg'; require_once (ABS_PATH.'classes\\'.$class_name.'.php'); } $process=new Main('1'); ?>
после php.exe -a index.php у меня есть:
Interactive mode enabled Fatal error: Class 'Main' not found in C:\xampp\htdocs\oopHotLine\index.php on line 10 [Finished]
поэтому он не показывает вывод «gg». Если я вручную сделаю __autoload ('Main'); – все нормально. То же самое для руководства require_once или include. Все разрешения в папке Windows установлены на полный доступ. Версия Php – Версия PHP => 5.3.8;
Пожалуйста помоги.
Поскольку DaveRandom указал:
Autoloading is not available if using PHP in CLI interactive mode.
Итак, вместо использования php.exe -a index.php
вырежьте -a
off и попробуйте запустить скрипт с php.exe index.php
.
Заметки из руководства по PHP по этому вопросу, которые могут иметь значение:
Судя по первому сообщению, это, вероятно, ответ:
Автозагрузка недоступна при использовании PHP в интерактивном режиме CLI.
…но также:
Функция spl_autoload_register () предоставляет более гибкую альтернативу для автозагрузки классов. По этой причине использование __autoload () не рекомендуется и может быть устаревшим или удаленным в будущем.
Помимо этого, вот как я напишу вашу функцию автозагрузки:
function __autoload($class_name) { if (file_exists(ABS_PATH."classes/$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 portable require_once (ABS_PATH."classes/$class_name.php"); } }
http://www.php.net/manual/en/function.spl-autoload-register.php
Если ваш код имеет существующую функцию __autoload, эта функция должна быть явно зарегистрирована в стеке __autoload. Это связано с тем, что spl_autoload_register () эффективно заменит кеш-память для функции __autoload либо spl_autoload (), либо spl_autoload_call ().