真像实验室:PHP研发Include和require的区别是什么?-php是什么文件

你是否面试的时候不只一次被问过include、require、include_once、require_once的区别,你的回答是不是报警级别不一样,一个遇到错误只是warning,一个是Fatal致命错误,然后就是一个是条件包含,一个是非条件包含,也就是所谓的:

require是在PHP脚本引擎编译的时候就载入的,而include是条件执行,当代码执行到那一行时才包含。

真像实验室:PHP研发Include和require的区别是什么?

真像实验室:PHP研发Include和require的区别是什么?

这样的文章只要你搜索include和require的区别,一大把都是,真像真的是这样吗?

我们访问PHP官方手册http://php.net/manual/zh/function.require.php,里面的描述:

(PHP 4, PHP 5, PHP 7)

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

看来官方的手册也没有说require和include有条件执行的区别。既然是求真,那么我们就来做个实验。

实验代码如下:

<?php

$i = 0;

while($i < 4) {

$i++;

require "test{$i}.php";

}

我事先准备了test1.php~test4.php文件,文件内容是打印__FILE__

执行结果:

[root@aliyun ~]# php test.php

string(15) "/root/test1.php"

string(15) "/root/test2.php"

string(15) "/root/test3.php"

string(15) "/root/test4.php"

[root@aliyun ~]# vi test.php

真像就是require也可以条件执行,他和include的区别仅仅是错误级别不一样。而对应的include_once,require_once的区别就是会检测如果文件已经包含,则直接使用缓冲,不会重复包含。

对于搜索引擎如此发达的今天,我们从网上收集的答案不一定是真实的,做为一名合格的研发,我们应该有自己的主观判断和求真意识。

推荐阅读