Разница между require, include, require_once и include_once?

В PHP:

  • Когда следует использовать require vs. include?
  • Когда следует использовать require_once vs. include_once?

Ответы

Ответ 1

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

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

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

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

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

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

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

Ответ 2

Использование

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

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

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

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

Но в основном, это зависит от вас, когда использовать.

Ответ 3

Мое предложение состоит в том, чтобы просто использовать require_once 99,9% времени.

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

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

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

В качестве альтернативы, в современных OOP, autoload ваши классы при использовании.

Ответ 4

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

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

Ответ 5

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

require() выкинет E_COMPILE_ERROR и остановит script, если он не может включить файл.

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

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

Ответ 6

Всякий раз, когда вы используете 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, но файл будет включать тест1 один раз и для вызова во второй раз это будет проигнорировано. И без остановки будет отображать вывод один раз.

Всякий раз, когда вы используете '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, будет включать файл один раз, но прекратите дальнейшее выполнение.

Ответ 7

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

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

Ответ 8

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

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

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

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


Для *_once():

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

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


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

Ответ 9

Ответ через 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.

Ответ 10

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

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

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

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

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

Ответ 11

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

Ответ 12

требуется приведет к фатальной ошибке (E_COMPILE_ERROR) и остановит script.

включить будет выдавать предупреждение (E_WARNING), а script будет продолжаться.

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

Если a.php является PHP script, вызывающим b.php с требованием require_once(), и не находит b.php, a.php прекращает выполнение, вызывая фатальную ошибку.

Ответ 13

Требовать критические части, такие как авторизация, и включать все остальные.

Несколько включений - это очень плохой дизайн, и его следует избегать вообще. Итак, * _once не имеет большого значения.

Ответ 14

Include/Require вы можете кроме того, один и тот же файл:

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

require_once/include_once

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

Ответ 15

включают в себя()

Он содержит указанный файл. Он выдаст предупреждение, если не сможет найти файл и выполнить остальные скрипты

требуется()

Он содержит указанный файл. Это приведет к фатальной ошибке, если он не сможет найти файл и прекратит выполнение

include_once()

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

require_once()

Он содержит указанный файл. файл уже включен, он больше не будет включен. Это приведет к фатальной ошибке, если он не сможет найти файл и прекратит выполнение.

Ответ 16

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

Другое дело, если файл включен раньше. Тогда require_once() не будет включать его снова.

Ответ 17

Из руководство:

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

То же самое верно для вариантов _once().

Ответ 18

В эпоху автозагрузчиков PSR-0/PSR-4 может оказаться совершенно ненужным использовать какие-либо операторы, если все, что вам нужно, - это сделать некоторые функции/классы доступными для вашего кода (конечно, вам все еще нужно использовать require_once в вашем файле начальной загрузки и include шаблоны, если вы все еще используете PHP в качестве движка шаблонов).

Ответ 19

Я использовал функцию, как показано ниже:

function doSomething() {
    require_once(xyz.php);
    ....
}

В xyz.php были зафиксированы постоянные значения.

Мне нужно вызвать эту функцию doSomething() из другого файла PHP script.

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

Я решил свою проблему, переключившись с require_once() на include(), обновленный код doSomething() выглядит следующим образом:

function doSomething() {
    include(xyz.php);
    ....
}

Теперь каждый итерационный вызов doSomething() получает константы, определенные в xyz.php.

Ответ 20

 

  • Когда следует использовать require или include?

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

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

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

  • Когда следует использовать require_once или require?

    Основное различие между require и require_once равно require_once, будет проверять, включен ли файл или нет, если он уже включен, тогда он не будет включать файл, тогда как функция require будет включать в себя файл независимо от того, включен ли файл или нет.

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

Ответ 21

  • Используйте require, когда вам нужно загрузить любой класс, функцию или зависимость.

  • Используйте включить функцию, когда вы хотите загрузить файл в стиле шаблона

Если вы все еще запутались, просто используйте require_once на все время.

Ответ 22

Это все способы включения файлов.

Требовать означает, что это нужно. Require_once означает, что это потребуется, но требуется только один раз. Включить означает, что он будет включать файл, но для продолжения он не нужен.

Примеры:

Require 'filename'
Require_once 'filename'
Include 'filename'

Существует также функция include_once, которая включает файл один раз.

Include_once 'filename'

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

Ответ 23

Я заметил одну вещь: при использовании include я могу получить доступ к функциям включенных файлов только из файла, который их включил. С помощью require_once я могу запустить эту функцию во втором файле required_once.

также: я рекомендую добавить

if(file_exists($RequiredFile)){
    require_once($RequiredFile);
}else{
  die('Error: File Does Not Exist');
}

Потому что когда require_once убивает страницу, она может иногда отображать каталог файлов вашего сайта

Вот пользовательская функция, которую я сделал, чтобы требовать файлы:

function addFile($file, $type = 'php', $important=false){
    //site-content is a directory where I store all the files that I plan to require_once
    //the site-content directory has "deny from all" in its .htaccess file to block direct connections
    if($type && file_exists('site-content/'.$file.'.'.$type) && !is_dir('site-content/'.$file.'.'.$type)){
        //!is_dir checks that the file is not a folder
        require_once('site-content/'.$file.'.'.$type);
        return 'site-content/'.$file.'.'.$type;
    }else if(!$type && file_exists('site-content/'.$file) && !is_dir('site-content/'.$file)){
        //if you set "$type=false" you can add the file type (.php, .ect) to the end of the "$file" (useful for requiring files named after changing vars)
        require_once('site-content/'.$file);
        return 'site-content/'.$file;
    }else if($important){
        //if you set $important to true, the function will kill the page (which also prevents accidentally echoing the main directory path of the server)
        die('Server Error: Files Missing');
        return false;
    }else{
        //the function returns false if the file does not exist, so you can check if your functions were successfully added
        return false;
    }
}

пример использования:

$success = addFile('functions/common');

if($success){
    commonFunction();
}else{
    fallbackFunction();
}

Ответ 24

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

Из английского слова требуется, PHP говорит, что выполнение страницы или файла зависит от требуемого файла.

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

Ответ 25

На другой день меня спросили, в чем разница между include и require на PHP. Они, похоже, функционируют одинаково, но есть существенная разница.

Во-первых, ни включать, ни требовать не являются функциями, они являются конструкциями. Поэтому нет необходимости вызывать их с помощью круглых скобок, таких как include ('file.php'); вместо этого рекомендуется использовать include 'file.php'.

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

Вы должны подобрать любые фатальные ошибки, вызванные необходимостью во время процесса разработки, и иметь возможность разрешать их, прежде чем выпустить скрипт в дикую природу; однако вы можете рассмотреть возможность использования include для установки плана B, если это не так прямолинейно:

<?php
if (@include 'file.php') {
    // Plan A
} else {
    // Plan B - for when 'file.php' cannot be included
}

В этом примере include используется для захвата файла file.php, но если это не удается, мы сжимаем предупреждение с помощью @и выполняем альтернативный код. include вернет false, если файл не найден.

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

Ответ 26

Короче:

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

  • include_once: если вы укажете include_once, тогда PHP сделает так, чтобы он включал файл только один раз.

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

  • require_once: Что касается include_once, но вместо предупреждения будет сгенерирована фатальная ошибка.

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

Ответ 27

Я знаю это слишком поздно, просто чтобы указать на мою точку зрения: если вам требуется кусок исполняемого кода, это плохая практика. Просто запишите файл с классом или функцией, которые можно использовать повторно, вместо того, чтобы заполнять скрипт повторяющимся кодом. Будучи быстрее, я использую только require(). Если мне случайно понадобится один и тот же файл дважды, при отладке возникнет ошибка, и я просто удаляю de duplicate require. Я бы сказал, что include может быть полезен для извлечения некритического кода, но 99.9999% раз мне нужен весь код, который мне требуется. Но именно так я структурирую свой код, я думаю о каждом кусочке кода, который я могу удалить, чтобы скрипты выполнялись максимально быстро, поэтому требующий несколько раз один и тот же скрипт просто замедляет время выполнения, а не только потому, что вы заполняете сценарий, но также потому, что каждый загружаемый файл также добавляет время к выполнению.

Ответ 28

require имеет большие накладные расходы, чем include, так как он должен сначала проанализировать файл. Замена requires на includes часто является хорошей методикой оптимизации.

Ответ 29

Просто используйте require и include.

Потому что думайте, как работать с include_once или require_once. Это поиск данных журнала, которые сохраняют включенные или требуемые файлы PHP. Так что это медленнее, чем включать и требовать.

if (!defined(php)) {
    include 'php';
    define(php, 1);
}

Просто используя вот так...