php

php中require()和include()的区别

2023-09-21

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()替换他们。