面试时总会被问到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引入文件的时候,如果碰到错误,会给出致命错误,并停止运行下边的代码。

 

相关文章:

  • 2022-01-19
  • 2021-11-26
  • 2022-01-12
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-05-21
  • 2022-12-23
  • 2022-12-23
  • 2021-10-14
  • 2022-12-23
  • 2022-01-01
相关资源
相似解决方案