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

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