2013-08-03 1 views
0

Я нашел полезный код, который помогает мне сохранить мой код для чтения.Autoload классы, если скрипт им нужен. Что делать, если файл php находится в другой папке?

function class_autoload($classname) { 
    echo "class_autoload"; 
    @require_once ("class-{$classname}.php"); 
} 

spl_autoload_register('class_autoload'); 

Он загружает классы, когда серверу требуется их для запуска моего кода. Но теперь у меня есть проблема: Один из моих php-файлов находится в другой папке, а затем остальные. Поэтому я не могу использовать это:

@require_once ("class-{$classname}.php"); 

И я не могу изменить путь, потому что другой PHP-файлы закончится работа:/ Что я должен делать?

ответ

2

require_once производит фатальную ошибку, если указанный файл не существует. Оператор управления ошибками (@) не меняет этого. Вместо этого используйте include_once или проверьте, действительно ли файл, который вы пытаетесь прочитать.

Вы можете позвонить spl_autoload_register, передавая разные имена функций каждый раз. Затем автозагрузчик вызовет каждую из этих функций, чтобы попытаться загрузить класс. Используйте эту функцию для записи новой функции, аналогичной class_autoload, но она знает, где находится файл класса, которую вы не можете загрузить с помощью текущего class_autoload. Вызовите spl_autoload_register, передав эту новую функцию в качестве аргумента. Конечно, если вы не измените require_once в class_autoload, эта новая функция никогда не будет вызвана; ваш скрипт будет умер, прежде чем автозагрузчик когда-либо получит шанс попробовать вашу новую функцию.

Также взгляните на PSR-0. Это описывает, как имена классов должны перевести в каталог и имена файлов. Постарайтесь придерживаться этого стандарта, когда вы выбираете, куда положить и как назвать файлы классов. Это облегчает вам жизнь и людям, которые пытаются понять ваш код.

+0

Еще один вопрос: можно получить домен моего сайта с помощью PHP и использовать абсолютный путь? Это будет полезно, если я переместлю эти файлы в другую папку. – Piotrek

 Смежные вопросы

  • Нет связанных вопросов^_^