简述include、include_once、require和require_once的区别

by 2018-9-18

了解下include、include_once、require和require_once这4个函数:

include函数会将指定的文件读入并且执行里面的程序;会先按参数给出的路径寻找,如果没有给出目录(只有文件名)时则按照 include_path 指定的目录寻找。如果在 include_path 下没找到该文件则 include 最后才在调用脚本文件所在的目录和当前工作目录下寻找。如果最后仍未找到文件则 include 结构会发出一条警告继续运行。

require 和 include 几乎完全一样,除了处理失败的方式不同之外。require 在出错时产生 E_COMPILE_ERROR 级别的错误。换句话说将导致脚本中止而 include 只产生警告(E_WARNING),脚本会继续运行。


include_once 语句在脚本执行期间包含并运行指定文件。此行为和 include 语句类似,唯一区别是如果该文件中已经被包含过,则不会再次包含。如同此语句名字暗示的那样,只会包含一次。

include_once 可以用于在脚本执行期间同一个文件有可能被包含超过一次的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。



require_once 语句和 require 语句完全相同,唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含。


1、include与require的区别

include与require除了在处理引入文件的方式不同外,最大的区别就是:include在引入不存文件时产生一个警告且脚本还会继续执行,而require则会导致一个致命性错误且脚本停止执行。

<?php
  include 'no.php';
  echo '123';
?>

如果no.php文件不存在,echo '123'这句是可以继续执行的. 

你看到的可能是类似下边的情况: 

点击查看原图

<?php
require 'no.php';
echo '123';
?>

如果no.php文件不存在,echo '123'这句是不执行的,在require时就停止了。 

你看到的可能是类似下边的情况: 

点击查看原图


2、include与include_once的区别(require与require_once的区别)

include_once (require_once)语句在脚本执行期间包含并运行指定文件。此行为和 include (require)语句类似,区别是如果该文件中的代码已经被包含了,则不会再次包含,只会包含一次。include_once(require_once)需要查询一遍已加载的文件列表, 确认是否存在, 然后再加载。

<?php
require '1.php';
require '1.php';
?>
这种情况下1.php被包含两次。
<?php
require '1.php';
require_once '1.php';
?>

这种情况下,第二次包含时,是不会进行包含的。


include(require)与include_once(require_once)的抉择问题:

通常:include_once和require_once会有性能上的下降,因为他需要判断之前是否包含过。一般情况下,也不太需要去考虑,除非这已经影响到你程序的性能了。

在性能方面include和require已经差不多了,主要是看错误后处理方法。

  • 下载列表

目前有 2 条评论

avatar

游客2746303518  2018-09-18 18:24 1楼

但不管$something取何值,下面的require代码将把文件somefile包含进文件里:

这个描述是错误的,这里的行为 require和include是一致的。都要根据外面的$something来决定 回复
avatar

星之宇  2018-09-18 18:31

@游客2746303518:php5.3之前是有区别的,现在已经没有了,比较懒没更新。 回复
昵称
邮箱
主页
提交
订阅