面试时总会被问到include和require的区别,回答的时候一般也是有以下几种区别:

1、include引入文件的时候,如果碰到错误,会给出警告,并继续运行下边的代码。

  require引入文件的时候,如果碰到错误,会给出致命错误,并停止运行下边的代码。

2、在失败时 include 返回 FALSE 并且发出警告。成功的包含则返回 1,除非在包含文件中另外给出了返回值。

  require无返回值

3、incluce在用到时加载,require在一开始就加载

4、include()与require()的功能相同,用法上却有一些不同,include()是有条件包含函数,而require()则是无条件包含函数。

以上都是在网上随手一搜就可以出来的答案,如果你用的php版本时php4或者更早之前的,这些区别你在回答时,是没有什么问题的,但是,如果是之后的版本,你看过之后不加实践,那么,你就要注意了。

下面,我将在php5.3和php7这两个版本下进行实践,检验上述4个区别。

区别一的验证:include引入文件的时候,如果碰到错误,会给出警告,并继续运行下边的代码;require引入文件的时候,如果碰到错误,会给出致命错误,并停止运行下边的代码。

include包含

<?php
include 'test.php'; echo 'aaa'; //运行结果
Warning: include(test.php): failed to open stream: No such file or directory in
D:\Program Files\PhpTool\Apache24\htdocs\1.php on line 2 Warning: include(): Failed opening 'test.php' for inclusion (include_path='.;C:\php\pear') in
D:\Program Files\PhpTool\Apache24\htdocs\1.php on line 2
aaa  //可以看到这里输出了echo执行的值

require包含

<?php
require 'test.php'; echo 'aaa'; //运行结果
Warning: require(test.php): failed to open stream: No such file or directory in
D:\Program Files\PhpTool\Apache24\htdocs\1.php on line 2 Fatal error: require(): Failed opening required 'test.php' (include_path='.;C:\php\pear') in
D:\Program Files\PhpTool\Apache24\htdocs\1.php on line 2
//可以看到此处只有致命错误提示,没有再输出echo执行后的值

由以上结果可以判断出,区别一是准确无误的,你可以大声的告诉面试官,就是这个答案。

区别二的验证:在失败时 include 返回 FALSE 并且发出警告。成功的包含则返回 1,除非在包含文件中另外给出了返回值;require无返回值

include返回值

<?php
var_dump(include '2.php');  //成功时返回int(1),
              //失败时"在失败时 include 返回 FALSE 并且发出警告。
              //成功的包含则返回 1,除非在包含文件中另外给出了返回值。"(这是php7手册中的原话,经实践通过)

require返回值

<?php
var_dump(require '2.php');  //成功时返回值也是int(1),
              //失败时只发出致命错误,无返回值,其实想想也知道,根据区别一可以得知,require只要发生错误就中止脚本运行了,怎么还会有返回值呢

所以,目前为止,我们可以得出区别二一部分是正确的,回答时我们可以这样回答:include和require包含成功时都返回1,除非在包含文件中另外给出了返回值;而在失败时 include 返回 FALSE 并且发出警告,require仅发出致命错误无返回值。

区别三的验证:incluce在用到时加载,require在一开始就加载    

公共文件

<head>
<meta charset="utf-8" />
</head>
<body>
<p>测试</p>
</body>
</html>

include多次包含相同文件

<?php
echo 'aaa<br />';
include '2.php'; //运行结果
aaa

测试

require多次包含相同文件

<?php
echo 'aaa<br />';
require '2.php';
//运行结果  
aaa

测试

由上述结果可以看到,include和require包含之前如果有别的php脚本同样还是会先执行php脚本再执行包含,所以区别三是错误的(这里的区别三和区别四其实是同一个道理)。

区别四的验证:include()与require()的功能相同,用法上却有一些不同,include()是有条件包含函数,而require()则是无条件包含函数。   

假设2.php不存在,故按照区别四来看结果,include包含的代码应该未执行,不报错,而require包含的这段代码require执行了并且报错。

include包含

<?php
if(false) {
include '2.php';
} //运行结果:无输出(即未执行include)

require包含

<?php
if(false) {
require '2.php';
} //运行结果:无输出(即未执行require)

从实践结果中完全可以看出,区别四的说法是错误的,include和require都是条件包含的。

总结:include和require的区别主要是

1> include引入文件的时候,如果碰到错误,会给出警告,并继续运行下边的代码。

  require引入文件的时候,如果碰到错误,会给出致命错误,并停止运行下边的代码。

2> include和require包含成功时都返回1,除非在包含文件中另外给出了返回值;

  而在失败时 include 返回 FALSE 并且发出警告,require仅发出致命错误无返回值。

真正的区别其实只有一个:(再次强调,该区别仅再php5.3及php7版本实验通过,再早的版本不予实验)

include引入文件的时候,如果碰到错误,会给出警告,并继续运行下边的代码。

require引入文件的时候,如果碰到错误,会给出致命错误,并停止运行下边的代码。

include和require的区别误区的更多相关文章

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

    1.引用文件方式 对 include()来说,在include()执行时文件每次都要进行读取和评估:而对于require()来说,文件只处理一次(实际上,文件内容替换 了require()语句.这就意 ...

  2. PHP中include和require的区别

    include和require的区别,其实两者没有太大的区别,如果要包含的文件不存在,include提示notice,然后继续执行下面的语句,require提示致命错误并且退出. 根据测试,win32 ...

  3. php引入文件(include 和require的区别)

    引入文件: 首先需要一个php文件: <?php class shao//类名必须和文件名相同!!! { public $xxx="666"; } $shili = new ...

  4. php include 和require的区别与转码

    php include 和require的区别相同点:include和require 都能把另外一个文件包含到当前文件中.  不同点:使用include时,当包含的文件不存在时,系统会报出警告级别的错 ...

  5. php部分---include()与require()的区别、empty()与isset is_null的区别与用法详解

    include()与require()的用途是完全一样的,不一定非得哪个放在最前面哪个放在中间.他们最根本的区别在于错误处理的方式不一样. 1.处理错误的方式: require()一个文件存在错误的话 ...

  6. include 和 require 的区别

    1. 首先不去介绍大家都知道的区别,百度上都进行了详细的说明,对于返回值的方面大家都很少提到. include 和 require 还有一个区别就是是否具有返回值.参见手册 对include 加载文件 ...

  7. include和require的区别

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

  8. php 中 include 与 require 的区别

    以下内容转自:https://blog.csdn.net/hsd2012/article/details/51089785 网上太多关于php中include与require区别.其实说的都是经不起验 ...

  9. PHP 中 include 和 require 的区别详解

    require() 语句的性能与 include() 相类似,都是包括并运行指定文件.除了处理失败的方式不同之外.require 在出错时产生 E_COMPILE_ERROR 级别的错误,终止脚本运行 ...

随机推荐

  1. 版本管理工具-SourceSafe

    一.什么是SourceSafe SourceSafe是Micrsoft公司推出的一款支持团队协同开发的配置管理工具,是Visual Studio的套件之一.因为其短小精悍,又继承了微软集成销售的一贯作 ...

  2. angular6项目中使用echarts图表的方法(有一个坑,引用报错)

    1.安装相关依赖(采用的webpack) npm install ecahrts --save npm install ngx-echarts --save 2.angular.json 配置echa ...

  3. 【wiki】红帽linux

    Red Hat Enterprise Linux From Wikipedia, the free encyclopedia wiki 上面红帽的版本信息. https://en.wikipedia. ...

  4. OO终章

    一,第四单元架构设计 第一次作业:只有类图 1,重置MyClass,MyOperation等类,为使里面只有必要数据(name,id,visibility等).或方便组织数据(如MyClass作为其底 ...

  5. angular4 学习日志(一 依赖注入)

    1.创建一个服务,为了好管理建一个名叫services的文件夹管理所有服务: ng g service services\person 2.在服务中定义一个person 类 : 3.在app.mdul ...

  6. Java代码工具箱之超出游标最大数

    1. Java大量写入oracle时容易出现此错.经过此错,也触动自己要深刻理解 java 的 prepareStatement 等对象,及数据库的连接与释放. 2. 原因:经常会出现在 for 循环 ...

  7. node基础

    javascript window gulp ---- 前端工程构建工具 webpack ---- 前端工程构建工具 java Python php:后台 本地电脑,服务器 node 本地或服务端运行 ...

  8. 为什么90%的IT人员都不适合做老大?

    什么是格局? 格局就是能够很好的平衡短期利益和长期利益. 过分注重短期利益的人必然会失去长期利益,到头来一定会很普通. 例如:跳槽不断,可能短期薪资会增长,但长期来看后劲可能会不足,未来发展空间会变窄 ...

  9. java的重写(Override) (2013-10-11-163 写的日志迁移

    /* *说明方法的重写(又称方法的覆盖)子类并不想原封不动地继承父类的方法,而是想作一定的修改 */ package czbk.jxy.study; /** * @author Archon * @d ...

  10. DRF工程搭建

    环境安装与配置 DRF需要以下依赖: Python (2.7, 3.2, 3.3, 3.4, 3.5, 3.6) Django (1.10, 1.11, 2.0) DRF是以Django扩展应用的方式 ...