PHP提供了两种包含外部文件的方法:include()和require()。
require()和include()都属于服务器端引用(Server Side Includes)中的常用方法,都是包括并运行指定文件。它们得相同点是都可以在当前 PHP 脚本文件执行时载入另外一个 PHP 脚本文件。
它们的区别有以下几种
出错处理方式
两者的第一个区别是,对于包含的文件不存在的时候是如何处理的
require包含文件的时候是绝对的包含,如果被包含的文件不存在那么会产生一个致命错误(fatal error),在错误发生后下面的脚本程序将不会执行。
include包含文件的时候是相对的包含,如果被包含文件不存在,那么会产生一个warning警告,但是下面的脚本程序会继续执行。
include 引入文件的时候,如果碰到错误,会给出提示,并继续运行下边的代码。
require 引入文件的时候,如果碰到错误,会给出提示,并停止运行下边的代码。
条件引用方式
在PHP中,include()是有条件包含函数,而require()则是无条件包含函数,也就是如果一个流程中加入require,无论条件成立与否都会先执行require。
例如在下面的例子中,使用include的时候,如果变量$somgthing为真,则将包含文件somefile:
if($something){ include("somefile"); }
但不管$something取何值,使用require的时候,下面的代码都将把文件somefile包含进文件里:
if($something){ require("somefile"); }
下面的这个有趣的例子充分说明了这两个函数之间的不同。
$i = 1; while ($i < 3) { require("somefile.$i"); $i++; }
在这段代码中,每一次循环的时候,程序都将把同一个文件包含进去。很显然这不是程序员的初衷,从代码中我们可以看出这段代码希望在每次循环时,将不同的文件包含进来。如果要完成这个功能,只能使用函数include():
$i = 1;
while ($i < 3) {
include("somefile.$i");
$i++;
}
require()语句与include()语句是不同的,它不能受任何控制结构的控制。这说明使用require()不能有条件的包含文件。如果这个 语句出现在循环中,或者位于取值为假的条件语句中,它也都会执行,并且只执行一次。
返回值不同
include有返回值,而require没有。
使用方法和放置位置
require的使用方法如:require("myfile.php"),这个语句通常放在PHP程序的最前面,PHP程序在执行前,就会先读入require所指定引入的文件,使它变成PHP程序网页的一部份。常用的函数,一般可以用这个方法将它引入到网页中。
include使用方法和require一样如:include("myfile.php"),而这个语句一般是放在流程控制的处理区段中。PHP脚本文件在读到include()语句时,才将它包含的文件读取进来。这种方式,可以把程式执行时的流程简单化。
incluce在用到时加载
require在一开始就加载
_once后缀表示已加载的不加载
总结
1、include()在执行文件时每次都要进行读取和评估; require()文件只处理一次(实际上文件内容替换了require()语句)。
2、require()通常放在PHP脚本程序的最前面,include()的使用和require()一样,一般放在流程控制的处理区段中,PHP脚本文件读到include()语句时,才将它包含的文件读进来,这种方式,可以把程序执行时的流程简单化。
3、require()和include()语句是语言结构,不是真正的函数,可以像PHP的其他语言结构一样。
4、require()包含文件失败,停止执行,给出错误(致命的)。
5、include()常用于动态包含.通常是自动加载的文件,即使加载出错,整个程序还是继续执行一个页面声明,另一个页面调用包函文件失败,继续向下执行,返回一条警告。
6、include_once()和require_once()语句也是在脚本执行期间包括并运行指定文件,与7、include()require()唯一的区别是如果文件中的代码已经被包括了,则不会再次包括。
8、include时执行时调用的,是一个过程行为,有条件的,而require是一个预置行为,无条件的。
有 once 后缀的特点,比如 require_once include_once,是判断当前载入的脚本文件是否已经载入过,如果载入了就不在执行。
为了避免多次包含同一文件,可以使用include_once()和require_once()替换他们。