1. Обзор
Производительность require() аналогична include(), так как оба включают и выполняют указанный файл. Разница в том, что для include() файл считывается и вычисляется при каждом его выполнении; тогда как для require() файл обрабатывается только один раз (фактически содержимое файла заменяет оператор require()). Это означает, что если есть код, который может выполняться несколько раз, использование require() эффективнее. С другой стороны, если вам нужно считывать разные файлы при каждом выполнении кода или у вас есть цикл, перебирающий группу файлов, используйте include().
Использование require() следующее:
require("myfile.php")
Этот оператор обычно размещается в самом начале PHP-скрипта. Перед выполнением PHP-программы она сначала считывает файл, подключаемый оператором require(), делая его частью файла PHP-скрипта.
Использование include() такое же, как и require, например:
include("myfile.php")
Этот оператор обычно размещается в разделе обработки потока управления.
Файл PHP-скрипта считывает включаемый файл только тогда, когда встречает оператор include(). Такой подход может упростить поток выполнения программы.
- incluceЗагружать при необходимости
- requireЗагружать в начале
- _onceСуффикс означает, что уже загруженные файлы повторно не загружаются.
В системе PHP при загрузке PHP-программ существует процесс псевдокомпиляции, который может ускорить выполнение программы. Однако файлы, включённые с помощью include, всё равно интерпретируются и выполняются. Если в включённом файле возникает ошибка, основная программа продолжает работу; если ошибка возникает в файле, подключённом через require, основная программа останавливается. Поэтому, если ошибка во включаемом файле мало влияет на систему (например, файлы интерфейса), используйте include; в противном случае используйте require.
Операторы require() и include() являются языковыми конструкциями, а не настоящими функциями. Как и другие языковые конструкции в PHP, например echo() может использовать форму echo("ab") или форму echo "abc" для вывода строки abc. Операторы require() и include() также могут принимать параметры напрямую без круглых скобок.
Операторы include_once() и require_once() также включают и выполняют указанный файл во время выполнения скрипта. Это поведение похоже на include() и require(), и использование такое же. Единственное отличие состоит в том, что если код в файле уже был включён, он не будет включён повторно. Эти два оператора следует использовать, когда во время выполнения скрипта один и тот же файл может быть включён более одного раза, чтобы гарантировать его однократное включение и избежать таких проблем, как переопределение функций и повторное присваивание переменных.
2. Подробное объяснение
2.1 Сообщения об ошибках
includeПри включении файла, если возникает ошибка, выводится предупреждение, и код ниже продолжает выполняться.
requireПри включении файла, если возникает ошибка, выводится предупреждение, и код ниже останавливается.
Рассмотрим пример. Создайте два PHP-файла с именами test-include.php и test-require.php. Обратите внимание, что в том же каталоге не должно быть файла с именем test-nothing.php.
test-include.php
test-require.php
Откройтеhttp://localhost/test-include.php, поскольку файл test-nothing.php не найден, мы увидели сообщение об ошибке, и одновременно abc был отображён под сообщением об ошибке. То, что вы видите, может быть похоже на следующее:
Warning: include(test-nothing.php) [function.include]: failed to open stream: No such file or directory in D:\www\test-include.php on line 2 Warning: include() [function.include]: Failed opening 'test-nothing.php' for inclusion (include_path='.;C:\php5\pear') in D:\www\test-include.php on line 2 abc
Откройте http://localhost/test-require.php. Поскольку файл test-nothing.php не найден, мы увидели сообщение об ошибке, но abc не был отображён под сообщением об ошибке. То, что вы видите, может быть похоже на следующее:
Warning: require(test-nothing.php) [function.require]: failed to open stream: No such file or directory in D:\www\test-require.php on line 2 Fatal error: require() [function.require]: Failed opening required 'test-nothing' (include_path='.;C:\php5\pear') in D:\www\test-require.php on line 2
2.2 Методы включения файлов
Когда выполняется include(), подключаемый файл должен читаться и вычисляться каждый раз; когда выполняется require(), подключаемый файл обрабатывается только один раз (фактически во время выполнения содержимое подключаемого файла заменяет инструкцию require()). Видно, что если у вас есть код, содержащий одну из этих директив и который может выполняться несколько раз, использование require() эффективнее. Если вам нужно каждый раз при выполнении кода читать другой файл или у вас есть цикл, перебирающий группу файлов, используйте include(). Вы можете задать переменную для имени файла, который хотите включить, и использовать эту переменную, когда параметром является include().
Оригинальная ссылка: https://blog.csdn.net/shenpengchao/article/details/52326233