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

<?php include 'test-nothing.php'; echo 'abc'; ?>

test-require.php

<?php require 'test-nothing.php'; echo 'abc'; ?>

Откройте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