Мне кажется, я не до конца понимаю принцип работы require, include, include_once, require_once и их принципиальную разницу. Поясните плиз на простых примерах.
html-программист, ты откуда это взял? если бы это было правдой, вот этот сценарий вываливался БЫ с ошибкой: (файла notexists.php не существует) Код (Text): <?php $a = FALSE; echo '('; if ($a) require './notexists.php'; echo ')'; Может быть в каком-нибудь PHP3 оно работало иначе. На самом деле require и include идентичны кроме одного: при отсутствии файла include выдаст Warning, а require завершится критической ошибкой. Если include/require спрятаны за условием, которое НЕ выполнилось, то не произойдет НИЧЕГО, в обоих случаях! Суффикс *_once означает, что повторное подключение не произойдет. Наличие *_once в коде означает, что автор не очень хорошо распланировал свой код и ему ссыкотно Добавлено спустя 9 минут 27 секунд: Ну совсем без них не обойдется ни один фреймворк. Другое дело, что автолоадер классов при нормальном проектировании будет это делать за тебя. Т.е. максимум один include в "точке входа" чтобы подключить начальный загрузчик и один include в функции-автолоадере. Всё! Чисто и аккуратно и не надо думать "поставить require или require_once?"
есть разные случаи. в некоторых код вложения не должен исполняться повторно. делать проверку в самом вложении? а если мне надо многократно использовать этот код в другом файле? не придумывайте. уже два человека сознались в том что не умеют пользоваться конструкциями подключения файлов.
Есть разные случаи и разные программисты. В случае ООП: 1) include в месте использования класса не нужен, т.к. этим занимается автолоадер 2) в самом автолоадере не надо *_once, т.к. для этого класса он не будет вызван повторно, если класс уже был загружен Если вы пишете процедурно и не можете отследить зависимости кода, тогда конечно *_once или собственные проверки типа if (defined(...)) это я и назвал плохим планированием: зависимости должны быть очевидными и предсказуемыми.
artoodetoo, ваши аргументы мне понятны и я с вами согласен на все 100. но, как вы верно заметили, есть разные случаи и программисты. если бы эти конструкции были признаны ненужными и их бы удалили из языка, а весь контроль подключений переложили бы на программиста - это был бы показатель. а то что эти конструкции есть и ими пользуются - не показатель того что программист - ссыкун, пишущий говнокод
Ну надо же как на пустом месте тему развили... Ну это я и так знаю, собственно поэтому я и вспомнил про фремворк. Но вопрос в другом, rainarr утверждает, что использование include это говнокод. Но ведь другого способа не существует. И да же все фремворки используя автолоадер подключают через include.
Хз что именно rainarr имел в виду. 90% программистов не умеют внятно высказать свою мысль. Что уж говорить о коде, который они пишут