Прочитал, что подключение файлов, через require_once обохидся очень дорого(как я понял в смысле скорости загрузки страницы)...почитал мануал, но моя слабая голова, так и не поняла, когда лучше использовать require, а когда require_once? Например для подключения файла с функциями, или для html-файла. А может вообще для каких, то целей выбрать include?
Где это написано, что "очень дорого"? Ты вряд ли заметишь разницу, если страница будет выдана не за 0.0002 секунды, а за 0.002. Притом, что какой-нибудь Битрикс вообще выдаёт страницы по секунде и больше. Не надо заморачиваться (пока что). Когда будут большие проекты и когда будут изучены разные методы реального ускорения выдачи страниц, тогда и наступит время выбора, использовать require_once или нет. Добавлено спустя 1 минуту 56 секунд: Во всяком случае к тому времени ты уже не вопросы будешь задавать, а отвечать на них.
Касательно того,что лучше использовать: Если в проекте используется автозагрузка файлов и вы ,например, интсанцируете один и тот же класс несколько раз, то чтобы автозагрузка каждый раз не подгружала один и тот же файл дважды используйте require_once. Короче говоря, если вы уверены что файл будет загружен только один раз то используйте require, в против случае require_once. А разница между include и require только в способах обработки ошибки, include выдает предупреждение и скрипт продолжает работу, а в случае require нет. Учитывая, что обычно без подключения нужного файла скрипт работать не сможет, имеет смысл использовать require. Как исключение опять же автозагрузка классов. Учитывая, что функций для автозагрузки может быть несколько зарегистрировано, то ваша функция не должна завершать работу и там используют include_once.
Вот честно есть большие сомнения насчет "дороговизны" *_once, проверить на тестах лениво, т.к. не очень это важно. Надо понимать, что если мы НЕ используем "once", то надо всё равно как-то гарантировать однократное подключение. Это может побочным эффектом самой архитектуры приложения, а может быть реализовано костылями вроде define('MODULE_LOADED', 1) и if (!defined('MODULE_LOADED')). Костыли сами по себе "небесплатные" и попробуйте сравнить в тестах что дороже. Обычно встроенные в язык механизмы работают быстрее чем ваш код!!! Лично я выбираю once / не-once, костыли / без костылей по простому принципу: если я пишу дополнение к существующему движку, использую сложившуюся в нём практику. «Со своим самоваром в Тулу не ездят». А если код на 100% мой, то там однократность гарантируется самой архитектурой и нет нужды в дополнительных проверках.