Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: php: include и require - чем отличаются?  (Прочитано 33342 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Chuda
Гость
« : 11-08-2006 21:30 » 

собственно, сабж.
а то иногда смущает незнание этой тонкости.
вроде на вид непонятны отличия, работают как будто одинаково.
когда что лучше использовать?
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 12-08-2006 07:26 » 

Вот порылся чуть чуть в мануале http://il.php.net/manual/ru/function.require.php
Цитата
require() and include()  are identical in every way except how they handle failure. include() produces a Warning while require() results in a  Fatal Error.
т.е. include если не обнаружит файла, просто выдаст предупреждение, require выдаст фатальную ошибку.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Chuda
Гость
« Ответ #2 : 12-08-2006 07:32 » 

а на практике у них и ошибки идентичные.
Сейчас даже специально проверила Жаль
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #3 : 12-08-2006 07:35 » 

В мануале написано, что после падения include скрипт будет продолжать работать. После падения require скрипт падает. 
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Chuda
Гость
« Ответ #4 : 12-08-2006 07:52 » 

http://tuxmaster.ru/include_error.php
Код:
<?php
include("foo.ha");
echo 
"but life still goes on";
?>


http://tuxmaster.ru/require_error.php
Код:
<?php
require("foo.ha");
echo 
"but life still goes on";
?>


результат практически идентичен. И фатальной ошибки не случается.
« Последнее редактирование: 12-08-2006 07:55 от Chuda » Записан
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 12-08-2006 08:10 » 

Во-первых, есть отличие в использование в условном операторе. Если делать
Код:
if(a>b):
include("file1");
else:
...
Здесь подключение файла произойдет при условии, что а больше b
Код:
if(a>b):
require("file1");
else:
...
Здесь подключение файла произойдет в ЛЮБОМ случае. Вот такая вот тонкость.
А во-вторых, ...  во-вторых я не знаю что Улыбаюсь
« Последнее редактирование: 12-08-2006 08:14 от nikedeforest » Записан

ещё один вопрос ...
Chuda
Гость
« Ответ #6 : 12-08-2006 08:19 » 

ага, а вот это сработало.
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 13-08-2006 10:00 » 

В PHP единственная действительно фатальная ошибка - ошибка синтаксиса - она всегда приведет к остановке программы. Прочие ошибки можно перехватить назначив свой обработчик (только один на все).
Как уже сказано, выполнение require() происходит сразу после проверки синтаксиса, потому обработчик ошибок должен быть определен в первых подгружаемых файлах, иначе возможны необработанные ошибки, которые могут привести (в зависимости от настроек в php.ini и настроек апача) к остановке программы.

Кстати, к include() и require() я бы еще добавил eval() - работа и поведение схожие.
Так же можно возвращать значение из include() и eval() посредством return.

Еще рекомендую всегда использовать require_once() вместо require().
Заменять include() на include_once() или нет - зависит от логики программы. Если в подгружаемом файле есть определения классов или ф-ий, то дважды его загружать нельзя.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Chuda
Гость
« Ответ #8 : 13-08-2006 10:06 » 

Если проект достаточно сложный, чтобы в нём использовать require, то довольно скоро практика покажет необходимость использования require_once ))
Записан
ed_tsech
Гость
« Ответ #9 : 17-05-2009 06:40 » 

inclube выполняется во время выполнения скрипта в который вписан.

require сразу загружает файл.

Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 17-05-2009 07:43 » new

ed_tsech, зачем поднимать тему двух лет давности ради прописных истин (да еще и не точных)? Если есть что дельное сказать — пожалуйста, а пост выше — бессмысленное дело.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines