详解PHP中include和require的区别

PHP
1.报错
include引入文件时,如果遇到错误,会报出Warning,并继续执行后面的代码;
require引入文件时,如果遇到错误,会报出Error,并停止运行后面的代码。

举例说明,创建两个名为 test-include.php 和 test-require.php 的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文件,
会看到类似于下面的Warning信息。同时,报错信息的下边正常显示了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文件,
我们看到了Fatal error报错信息。但是,报错信息的下边没有显示字符串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.条件引用
include是有条件包含函数;
require是无条件包含函数。

例如下面例子,如果变量$somg为真,则将包含文件somefile.php:

if($some) {
    include 'somefile.php';
}

但无论$some取何值,下面的代码将把文件somefile.php包含进文件里:

if($something) {
    require 'somefile.php';
}

下面的例子充分说明了这两个函数之间的不同

$i = 1;
while($i < 3) {
    require "somefile.$i.php";
    $i++;
}

可以从以上这段代码中看出,每一次循环的时候,程序都将把同一个文件包含进去,
很显然这不我们想要的,可以看出这段代码希望在每次循环时,
将不同的文件包含进来,如果要完成这个功能,只能使用include来实现。

$i = 1;
while($i < 3) {
    include "somefile.$i.php";
    $i++;
}

3.文件引用方式
include执行时所引用的文件,每次都要进行读取和评估;
require执行时所引用的文件,只处理一次(实际上执行时所引用的文件内容替换了require命令)。

可以看出若有包含这些指令之一的代码和可能执行多次的代码,则使用require效率比较高,
若每次执行代码时将读取不同的文件或者有通过一组文件叠代的循环,就使用include。

相关内容:

《详解PHP中include和require的区别》有2条评论

  1. 第二个条件引用,我觉得有问题捏,你说 无论$some取何值,下面的代码将把文件somefile.php包含进文件里:
    if($some) {
    require ‘somefile.php’;
    }
    我测试的不是丫,如果if条件不成立,里面的包含文件是不执行的。同理下面的 while 循环也是。

    希望共同讨论,一起进步。

    回复
    • 关键不是所包含文件里的代码是否执行,而是文件是否被包含,不知道你是否能明白?if条件不成立的话,即便包含了文件,里面的代码当然是不会执行的。

      回复

回复 风神 取消回复