Разница между require, include, require_once и include_once?
Заголовок: Вопросы по использованию require и include в PHP
Я работаю с PHP и столкнулся с некоторыми неясностями относительно использования функций require и include, а также их вариаций require_once и include_once. У меня есть несколько вопросов:
- В каких случаях следует использовать
require, а в каких —include? - Когда уместно применять
require_onceпо сравнению сinclude_once?
Я хотел бы получить рекомендации и примеры, чтобы лучше понять, как правильно использовать эти функции в своем коде. Спасибо!
5 ответ(ов)
Вопрос: В чем разница между функциями с суффиксом _once и без него? Также, какая разница между require и include?
Ответ:
Разница между функциями с суффиксом _once и без него заключается в том, что функции без _once включают указанный файл каждый раз, когда они вызываются. В то время как функции с _once (такие как include_once и require_once) отслеживают, какие файлы уже были включены, и гарантируют, что файл будет включён только один раз за выполнение скрипта. Это предотвращает повторное подключение одного и того же файла, что может привести к ошибкам, таким как повторное объявление функций или классов.
Что касается разницы между require и include: если файл, указанный в require, не найден, PHP сгенерирует фатальную ошибку и выполнение скрипта прекратится. В свою очередь, если файл, указанный в include, не найден, PHP выдаст только предупреждение, а выполнение скрипта продолжится. Таким образом, use require для обязательных файлов, от которых зависит работа вашего приложения, и use include для файлов, которые не критичны.
Рекомендуется организовывать определения классов и функций в отдельных файлах.
Используйте require_once() для загрузки зависимостей (классов, функций, констант).
Используйте require() для загрузки шаблонных файлов.
Используйте include_once() для загрузки необязательных зависимостей (классов, функций, констант).
Используйте include() для загрузки необязательных шаблонных файлов.
Ответ после 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.
Когда вы используете 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() завершит выполнение скрипта на этом месте, как и следовало ожидать.
- Когда следует использовать
requireилиinclude?
Функции require и include выполняют одну и ту же задачу: они подключают и оценивают указанный файл. Однако есть ключевое различие: require вызывает фатальную ошибку, если указанный файл недоступен или возникает другая ошибка, в то время как include генерирует предупреждение и продолжает выполнение кода.
Следовательно, вы можете использовать функцию require в том случае, когда файл, который вы пытаетесь подключить, является сердцем системы и его отсутствие может значительно повлиять на остальной код. В то время как include можно использовать, когда файл, который вы пытаетесь подключить, содержит менее важный код.
Моя личная рекомендация (для менее важного кода) — использовать функцию require на всех этапах разработки, чтобы упростить отладку кода. А затем замените все require на include перед переходом в продакшен, чтобы в случае пропущенных ошибок они не повлияли на конечного пользователя, и остальной код выполнялся корректно.
- Когда следует использовать
require_onceилиrequire?
Основное отличие между require и require_once заключается в том, что require_once проверяет, был ли файл уже подключен. Если файл уже подключен, он не будет подключен снова, в то время как функция require подключит файл независимо от того, был ли он ранее подключен.
Таким образом, если вы хотите подключить какой-то код несколько раз, используйте функцию require. Если вам нужно подключить код только один раз в вашем коде, используйте require_once.
Функции startsWith() и endsWith() в PHP
Как получить расширение файла в PHP?
Как читать большой файл построчно?
ReCaptcha 2.0 с использованием AJAX
Почему нельзя вызывать абстрактные функции из абстрактных классов в PHP?