Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разница между директивами include и require! Помогите понять. 
V
    Опции темы
DEIN
Дата 20.2.2007, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 22.12.2006
Где: Вильнюс (Литва)

Репутация: нет
Всего: нет



Здраствуйе,
Буду краток. Изучаю язык PHP. Основные назначения директив include и require я усвоил. Опишите, пожалуйста, в чем отличия между ними?
Спасибо за внимание.

П.с.: Программист я самый (: начинающий, поэтому большая просьба объяснять как можно примитивнее и (желательно) с примерами (тоже примитивными).
PM MAIL ICQ   Вверх
Serkys
Дата 20.2.2007, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1061
Регистрация: 19.4.2004

Репутация: 4
Всего: 22



Цитата(DEIN @  20.2.2007,  21:22 Найти цитируемый пост)
Программист я самый (: начинающий

Смайлик что-то кривит smile

Не вдаваясь в тонкости: при подключении через include ты не увидишь ошибок, которые могут быть в файле, а при require увидишь.
PM MAIL   Вверх
Voventus
Дата 21.2.2007, 06:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 7.12.2004
Где: г. Владивосток

Репутация: нет
Всего: нет



DEIN, include("") подключает файл непосредственно во время выполнения сценария. require("") же подключает файл уже до начала транслирования...
Таким образом include("") можно использовать в циклах

Код

<?php
for ($i=1; $i<=5; $i++)
    include ("file".$i.".php");
?>


Цикл подключает по-очереди файлы "file1.php", "file2.php", "file3.php", "file4.php", "file5.php"...
При попытке проделать то же самое, но с require(""), интерпретатор выдаст ошибку...


PM MAIL ICQ   Вверх
Shaggie
Дата 21.2.2007, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

Репутация: нет
Всего: 72



И если в сценарии нету очаровывающей многозначительности и файлы должны быть подключены в обязательном порядке и без затей - стоит использовать require. Это увеличивает скорость выполнения сценария.


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
SamDark
Дата 21.2.2007, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: 10
Всего: 38



Так... тогда объясните, почему это работает как положено и что я упустил:
Код

$module = $_GET['module'];
require('modules/'.$module.'.php');

$mod = new Module();
$mod->test();



--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
DEIN
Дата 21.2.2007, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 22.12.2006
Где: Вильнюс (Литва)

Репутация: нет
Всего: нет



Большое спасибо всем, кто пытался мне объяснить и огромное спасибо тем, кому это удалось сделать! (:
PM MAIL ICQ   Вверх
pirrat
Дата 21.2.2007, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 21.2.2007

Репутация: нет
Всего: нет



Цитата(SamDark @ 21.2.2007,  12:53)
Так... тогда объясните, почему это работает как положено и что я упустил:
Код

$module = $_GET['module'];
require('modules/'.$module.'.php');

$mod = new Module();
$mod->test();

fа теперь если не секрет,откуда этот код?
ну уж очень он знаком ))
Сорри за оФФтоп...
PM MAIL   Вверх
SamDark
Дата 22.2.2007, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: 10
Всего: 38



pirrat, 
Код собственного сочинения.


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
CyClon
Дата 22.2.2007, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 3.12.2005

Репутация: 3
Всего: 4



Если используется require и файл отсутствует - выполнение сценария будет прервано, include же выдаст только ошибку и выполнит код до конца.


--------------------
user posted image
PM   Вверх
ZlojEzh
Дата 24.2.2007, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 8.10.2005
Где: Киев, Украина

Репутация: 10
Всего: 15



Цитата(DEIN @  21.2.2007,  19:50 Найти цитируемый пост)
Большое спасибо всем, кто пытался мне объяснить и огромное спасибо тем, кому это удалось сделать! (:

DEIN, не спешите
Вам наговорили много чепухи


Цитата(Serkys @  20.2.2007,  23:16 Найти цитируемый пост)
при подключении через include ты не увидишь ошибок, которые могут быть в файле, а при require увидишь

сорри, цепляюсь к словам, но все же:
ошибки внутри подключаемого файла будут видны и в первом и во втором случаях одинаково (в зависимости от настроек пхп)
разница есть только в уровне ошибки, генерируемой при отсутствии подключаемого файла: require - fatal error, include - warning
как правильно сказал CyClon:
Цитата(CyClon @  22.2.2007,  16:03 Найти цитируемый пост)
Если используется require и файл отсутствует - выполнение сценария будет прервано, include же выдаст только ошибку и выполнит код до конца.



Цитата(Voventus @  21.2.2007,  06:45 Найти цитируемый пост)
DEIN, include("") подключает файл непосредственно во время выполнения сценария. require("") же подключает файл уже до начала транслирования...Таким образом include("") можно использовать в циклах

без обид
это полный бред
require, также как и include, обрабатывается при выполнении скрипта, а не при трансляции
и приведенный Вами пример будет отлично работать и с require (если, конечно, существуют файлы file1.php и т.д.)

Цитата(Shaggie @  21.2.2007,  08:18 Найти цитируемый пост)
И если в сценарии нету очаровывающей многозначительности и файлы должны быть подключены в обязательном порядке и без затей - стоит использовать require. Это увеличивает скорость выполнения сценария.

опять же, бред

напоследок кусок из мануала:
Цитата

The documentation below also applies to require(). The two constructs are identical in every way except how they handle failure. include() produces a Warning while require() results in a Fatal Error.


PM MAIL ICQ   Вверх
Nicholas_S
Дата 24.2.2007, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 12.10.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 19



Мануалы читать никто не пробовал, кроме ZlojEzh? smile
Есть замечательный такой ресурс, php.net.
Цитата

require()

require() includes and evaluates a specific file.

require() and include() are identical in every way except how they handle failure. They both produce a Warning, but require() results in a Fatal Error. In other words, don't hesitate to use require() if you want a missing file to halt processing of the page. include() does not behave this way, the script will continue regardless. Be sure to have an appropriate include_path setting as well.

    Замечание: Prior to PHP 4.0.2, the following applies: require() will always attempt to read the target file, even if the line it's on never executes. The conditional statement won't affect require(). However, if the line on which the require() occurs is not executed, neither will any of the code in the target file be executed. Similarly, looping structures do not affect the behaviour of require(). Although the code contained in the target file is still subject to the loop, the require() itself happens only once. 

    Замечание: Поскольку это языковая конструкция, а не функция, она не может вызываться при помощи переменных функций


Перевод:

Оператор require() подключает и исполняет указанный файл.

Операторы require() и include() идентичны во всех случаях, за исключанием того, как они обрабатывают ошибки (критические).
Они оба порождают предупреждения об ошибках, однако require() генерирует Fatal Error.
Другими словами, не старайтесь использовать require() если вы не хотите, чтобы подключаемый файл аварийно завершал ход выполнения текущего скрипта. Оператор include() работает иначе в этом случае - скрипт продолжит выполнение, не обращая внимания на ошибки.

Удостоверьтесь так же, что параметр include_path установлен в верное значение.

    Замечание: до PHP версии 4.0.2 справедливо следующее: оператор require() всегда будет пытаться прочитать указанный файл, даже если строка кода с этим оператором никогда не будет выполнена. Оператор if не влияет на вызов строки с оператором require(). Однако, если строка, в которой расположен оператор require(), не будет выполнена, код, находящийся в подключаемом файле, также не будет исполнен. Циклы тоже не влияют на условие выполнения оператора require(). Несмотря на то, что цикл должен подключать указанный файл несколько раз, оператор require() выполнится только 1 раз.


--------------------
...все в мире относительно
PM   Вверх
CyClon
Дата 24.2.2007, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 3.12.2005

Репутация: 3
Всего: 4



require рекомендуют использовать для файлов, без которых данный сценарий работать не сможет (т.е. конфиги, файлы классов и т.д.). Обычно используется require_once - который позволяет подключить данный файл всего лишь один раз. Принципиальной разницы нет, просто новички могут случайно подключить этот же файл второй раз. Данная функция избавит их от данной неприятности.

Цитата
ошибки внутри подключаемого файла будут видны


PS: Если не стоит:

Код
ini_set('display_errors', '0');
error_reporting(0);


Добавлено @ 13:46 
Nicholas_S, ключевая фраза до PHP версии 4.0.2. Можно жить сегодняшним днем, завтрашним, но не нужено жить вчерашним.


--------------------
user posted image
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0552 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.