PHP中include和require区别

最近面试中被问到include和require区别,现在总结一下。

先上官方手册镇楼:

 

 然后再对网上的各种谣言一一论证。

谣言一:include有返回值,而require没有

验证代码:

<?php
$res1 = require 'foo1.php';
$res2 = include 'foo2.php';
var_dump($res1, $res2);

执行结果:

[root@zhangyi php]# php bar.php 
int(1)
int(1)

再看另一种情况,foo1.php 和 foo2.php 中都是直接return的:

foo1.php:

<?php

return new stdClass();

foo2.php:

<?php

return [
        'host' => 'localhost',
        'port' => 3306,
];

再看上面的bar.php的执行结果:

[root@zhangyi php]# php bar.php 
object(stdClass)#1 (0) {
}
array(2) {
  ["host"]=>
  string(9) "localhost"
  ["port"]=>
  int(3306)
}

谣言二:include()是有条件包含函数,而 require()则是无条件包含函数

先简单解释下,大概意思是说,放在if判断里的include()会受if的判断结果而执行或不执行,但require则一定会执行。

foo1.php:

<?php

$res1 = max(1, 3);

foo2.php:

<?php
$res2 = [
        'host' => 'localhost',
        'port' => 3306,
];

bar.php:

<?php

if (time() % 2) {
        require('foo1.php');
        include('foo2.php');
}
var_dump($res1, $res2);

多次执行bar.php 看结果:

[root@zhangyi php]# php bar.php 
PHP Notice:  Undefined variable: res1 in /root/php/bar.php on line 6
PHP Notice:  Undefined variable: res2 in /root/php/bar.php on line 6
NULL
NULL
[root@zhangyi php]# php bar.php 
int(3)
array(2) {
  ["host"]=>
  string(9) "localhost"
  ["port"]=>
  int(3306)
}
[root@zhangyi php]# php bar.php 
int(3)
array(2) {
  ["host"]=>
  string(9) "localhost"
  ["port"]=>
  int(3306)
}
[root@zhangyi php]# php bar.php 
PHP Notice:  Undefined variable: res1 in /root/php/bar.php on line 6
PHP Notice:  Undefined variable: res2 in /root/php/bar.php on line 6
NULL
NULL

不带()的 require 和 include结果一样,大家可以自己尝试一下。

 

谣言三:require通常放在PHP程序的最前面,PHP程序在执行前,就会先读入require所指定引入的文件,使它变成PHP程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。include一般是放在流程控制的处理部分中PHP程序网页在读到include的文件时,才将它读进来。这种方式可以把程序执行时的流程简单化。

不知道说的是啥,就不验证了。

 

我目前正在翻译MySQL8.0的官方文档,有兴趣的可以来看看或者参与进来:https://github.com/zhyee/Mysql8.0_Reference_Manual_Translation

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章