Недавно я реализовал следующий код для автоматической загрузки классов в моем php-коде:
function my_autoloader($class) {
include 'classes/class_' . $class . '.php';
}
spl_autoload_register('my_autoloader');
Код содержится в файле, который включается в начало всех файлов, необходимых для создания веб-страницы. Итак, я приступил к удалению вызовов require_once из своего кода. Вот пример:
require_once('classes/class_web_page.php');
Как вы, вероятно, поняли из вышеизложенного, различные страницы моего сайта (это интернет-сообщество, поэтому есть форум, галерея и т. д.) используют класс web_page для создания заголовков страниц, меню и т. д. Различные фрагменты кода создают объект web_page, установить различные параметры, чтобы определить, какие опции меню и т. д. необходимы, дать странице некоторый контент и сгенерировать html.
Все было хорошо, пока я не внес изменения в файл class_web_page.php. Изменения были сразу заметны на большей части сайта... кроме домашней страницы.
Я обновил свой браузер, выключил и снова включил :-) попробовал позвонить http://www.terragenesis.co.uk/index.php, а не просто http://www.terragenesis.co.uk/ и даже останавливал и перезапускал apache на сервере. Несмотря на все это, изменения не отображались на главной странице. В конце концов, я поместил строку require_once обратно в index.php... и вуаля: изменения, которые я сделал в class_web_page.php, появились на домашней странице.
Так что мне кажется, что автозагрузчик загружал кэшированную копию class_web_page.php и ничто, даже перезапуск Apache, не собиралось убедить его получить новую версию. Почему он должен делать это для домашней страницы, а не для других страниц... Я понятия не имею.
Кто-нибудь еще испытал это? Я сделал что-то не так с кодом автозагрузчика? Как я могу это исправить... или мне придется вернуть все операторы require_once на место? :-(
На моем сервере установлена версия PHP 5.1.6.