14

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

22

Заголовок: Вопросы по использованию require и include в PHP

Я работаю с PHP и столкнулся с некоторыми неясностями относительно использования функций require и include, а также их вариаций require_once и include_once. У меня есть несколько вопросов:

  1. В каких случаях следует использовать require, а в каких — include?
  2. Когда уместно применять require_once по сравнению с include_once?

Я хотел бы получить рекомендации и примеры, чтобы лучше понять, как правильно использовать эти функции в своем коде. Спасибо!

5 ответ(ов)

0

Вопрос: В чем разница между функциями с суффиксом _once и без него? Также, какая разница между require и include?

Ответ:

Разница между функциями с суффиксом _once и без него заключается в том, что функции без _once включают указанный файл каждый раз, когда они вызываются. В то время как функции с _once (такие как include_once и require_once) отслеживают, какие файлы уже были включены, и гарантируют, что файл будет включён только один раз за выполнение скрипта. Это предотвращает повторное подключение одного и того же файла, что может привести к ошибкам, таким как повторное объявление функций или классов.

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

0

Рекомендуется организовывать определения классов и функций в отдельных файлах.

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

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

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

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

0

Ответ после 7 лет на вопрос 2018 года

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

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

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

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

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

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

0

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

<?php  
echo "сегодня: " . date("Y-m-d");  
?>  

Теперь, в другом файле, который я назвал test2.php, будет следующий код:

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

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

Теперь давайте рассмотрим, как работает include_once(). Если вам нужно подключить файл несколько раз в текущем файле, уместно использовать include_once(). У нас есть файл test3.php:

<?php  
echo "сегодня: " . date("Y-m-d");  
?> 

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

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

В этом случае, как вы можете видеть, файл test3.php будет подключен всего один раз, и в этом нет никаких ошибок, поскольку include_once() проверяет, был ли файл уже включен. Если да, то дальнейшее выполнение кода продолжится, и файл больше не будет подключен повторно. Однако важно отметить, что если в файле test3.php происходит какая-то ошибка, include_once() завершит выполнение скрипта на этом месте, как и следовало ожидать.

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

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

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

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

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

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

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

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь