Разница между require, include, require_once и include_once? - PullRequest
1120 голосов
/ 10 марта 2010

В PHP:

  • Когда я должен использовать require против include?
  • Когда я должен использовать require_once против include_once?

Ответы [ 24 ]

1326 голосов
/ 10 марта 2010

Также есть require и include_once.

Так что ваш вопрос должен быть ...

  1. Когда я должен использовать require против include?
  2. Когда я должен использовать require_once против require

Ответ на 1 описан здесь .

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

Ответ на 2 можно найти здесь .

Оператор require_once () идентичен require (), за исключением того, что PHP проверит, был ли файл уже включен, и, если это так, не включит (требует) его снова.

376 голосов
/ 10 марта 2010

Используйте

  • требуется
    когда файл требуется вашим приложением, например, шаблон важного сообщения или файл, содержащий переменные конфигурации, без которых приложение может сломаться.

  • require_once
    когда файл содержит контент, который может привести к ошибке при последующем включении, например, function important() { /* important code */} определенно требуется в вашем приложении, но поскольку функции не могут быть повторно объявлены, их не следует включать снова.

  • включают когда файл не требуется и поток приложения должен продолжаться, если он не найден, например,
    отлично подходит для шаблонов, ссылающихся на переменные из текущей области или что-то в этом роде

  • include_once
    необязательные зависимости, которые могут привести к ошибкам при последующей загрузке или, возможно, удаленному включению файлов, которые вы не хотите выполнять дважды из-за накладных расходов HTTP

Но, в принципе, вам решать, когда использовать какую.

287 голосов
/ 10 марта 2010

Я предлагаю просто использовать require_once 99,9% времени.

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

Если вам требуется / включая код, который выполняется на месте, это процедурный код, и вам необходимо познакомиться с новой парадигмой . Как объектно-ориентированное программирование, функционально-ориентированное программирование или функциональное программирование.

Если вы уже занимаетесь ОО или функциональным программированием, использование include_once в большинстве случаев будет задержкой , когда в стеке вы найдете ошибки / ошибки. Хотите ли вы знать, что функция do_cool_stuff() недоступна, когда вы собираетесь вызывать ее позже, или в тот момент, когда вы ожидаете, что она будет доступна , требуя библиотеку? Как правило, лучше сразу узнать, если что-то, что вам нужно и ожидается, недоступно, поэтому просто используйте require_once.

Либо в современном ООП просто автозагрузка ваших занятий при использовании.

33 голосов
/ 10 марта 2010

Разница между функциями _once и без функций _once: без _once код будет включен снова, тогда как с функциями _once PHP отслеживает включенные файлы и включит его только один раз.

Разница между требованием и включением: Если требуемый файл не найден, PHP выдаст фатальную ошибку, тогда как для включения будет выдано только предупреждение.

28 голосов
/ 03 ноября 2011

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

require() сгенерирует E_COMPILE_ERROR и остановит скрипт, если он не может включить файл.

Функции include_once() и require_once() не будут включать файл повторно, если он уже был включен.

См. Следующие страницы документации:

21 голосов
/ 29 сентября 2012

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

<?php  
echo "today is:".date("Y-m-d");  
?>  

и в другом файле, который я назвал test2.php

<?php  
require_once('test1.php');  
require_once('test1.php');  
?>

, так как вы смотрите m, требующий файл test1 дважды, но этот файл будет включать test1 один раз, и для вызова во второй раз это будет проигнорировано. И без остановки будет отображать вывод один раз.

Всякий раз, когда вы используете 'include_once () `, можно использовать в файле для включения другого файла, когда вам нужно вызвать вызываемый файл более одного раза в текущем файле. Здесь в примере у меня есть файл с именем test3.php.

<?php  
echo "today is:".date("Y-m-d");  
?> 

И в другом файле, который я назвал test4.php

<?php  
include_once('test3.php');  
include_once('test3.php');  
?>

когда вы смотрите, что m, включая файл test3, будет включать файл один раз, но остановит дальнейшее выполнение.

18 голосов
/ 10 марта 2010

Используйте «include» для многоразовых PHP шаблонов. Используйте «require» для обязательных библиотек.

"* _ Once" хорошо, потому что он проверяет, загружен ли файл или нет, но для меня это имеет смысл только в "require_once".

15 голосов
/ 10 марта 2010

Разница заключается в ошибке, сгенерированной командами. С require файл, который вы хотите использовать, действительно необходим и, следовательно, генерирует E_ERROR, если он не найден.

require() идентичен include(), за исключением того, что при сбое он также приведет к фатальной ошибке уровня E_ERROR.

include генерирует ошибку E_WARNING только в случае сбоя, что более или менее тихо.

Так что используйте его, если файл необходим, чтобы оставшийся код работал, и вы хотите, чтобы скрипт не работал, файл недоступен.


Для *_once():

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

То же относится и к require_once(), конечно.


Ссылка: require(), include_once()

14 голосов
/ 11 ноября 2017

Ответ через 7 лет для 2018

Этот вопрос был задан семь лет назад, и ни один из ответов не дает практической помощи по этому вопросу. В современном программировании PHP вы в основном используете required_once только один раз, чтобы включить свой класс автозагрузчика (часто автозагрузчик компоновщика), и он загрузит все ваши классы и функции (файлы функций должны быть явно добавлены в файл composer.json, чтобы быть доступными). во всех остальных файлах). Если по какой-либо причине ваш класс не загружается из автозагрузчика, вы используете require_once для его загрузки.

В наши дни вы используете require только для разделения большого фрагмента файла PHP. Это в основном определение большого массива. В таких случаях вы используете только require, а не require_once.

 <?php
// arr.php
return ['x'=>'y'];

 <?php
//main.php
$arr= require 'arry.php'

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

Нет практического варианта использования include и include_once на самом деле.

11 голосов
/ 02 июня 2012

Вы должны хранить определения классов и функций в файлах.

Используйте require_once() для загрузки зависимостей (классы, функции, константы).

Используйте require() для загрузки шаблонных файлов .

Используйте include_once() для загрузки необязательные зависимости (классы, функции, константы).

Используйте include() для загрузки необязательных шаблоноподобных файлов .

...