紫郢青索

知之者不如好之者,好之者不如乐之者

用户工具

站点工具


PHP文件包含

我们进行PHP开发时,通常会写好多文件来存放程序。不如:一个类写到一个文件中,同类型的类又放到一个文件夹下。

这样就会有好多的目录和文件,在调用的时候就需要引入要调用的文件。

这时就要用到PHP提供的包含语句:requirerequire_onceincludeinclude_once

require

我们有个文件require_1.php,在文件require_2.php中包含require_1.php

require_1.php
<?php
echo "require_1 is require" . PHP_EOL;
?>
require_2.php
<?php
require "require_1.php";
?>

在命令行执行

php ./require_2.php
 
#输出:
require_1 is require

多次包含同一个文件

在文件require_2.php中多次包含require_1.php

require_2.php
<?php
require "require_1.php";
require "require_1.php";
require "require_1.php";
?>

在命令行执行

php ./require_2.php
 
#输出:
require_1 is require
require_1 is require
require_1 is require

多次包含同一个文件,被包含的文件代码就会执行多次。

包含一个不存在的文件

在文件require_2.php中,包含不存在的文件require_no_exist.php

require_2.php
<?php
require "require_no_exist.php";
echo "here end" . PHP_EOL;
?>

在命令行执行

php ./require_2.php
 
#输出:
PHP Warning:  require(require_no_exist.php): failed to open stream: No such file or directory in /phpdemo/require_2.php on line 2
PHP Fatal error:  require(): Failed opening required 'require_no_exist.php' (include_path='.:') in /phpdemo/require_2.php on line 2

报错了,程序终止,没能执行完。

include

我们有个文件include_1.php,在文件include_2.php中包含include_1.php

include_1.php
<?php
echo "include_1 is include" . PHP_EOL;
?>
include_2.php
<?php
require "include_1.php";
?>

在命令行执行

php ./include_2.php
 
#输出:
include_1 is include

多次包含同一个文件

在文件include_2.php中多次包含include_1.php

include_2.php
<?php
include "include_1.php";
include "include_1.php";
include "include_1.php";
?>

在命令行执行

php ./include_2.php
 
#输出:
include_1 is include
include_1 is include
include_1 is include

多次包含同一个文件,被包含的文件代码就会执行多次。

包含一个不存在的文件

在文件include_2.php中,包含不存在的文件include_no_exist.php

include_2.php
<?php
include "include_no_exist.php";
echo "here end" . PHP_EOL;
?>

在命令行执行

php ./include_2.php
 
#输出:
PHP Warning:  include(include_no_exist.php): failed to open stream: No such file or directory in /phpdemo/include_2.php on line 2
PHP Warning:  include(): Failed opening 'include_no_exist.php' for inclusion (include_path='.:') in /phpdemo/include_2.php on line 2
here end

报警告,程序继续执行。

require_once

我们有个文件require_once_1.php,在文件require_once_2.php中包含require_once_1.php

require_once_1.php
<?php
echo "require_once_1 is require_once" . PHP_EOL;
?>
require_once_2.php
<?php
require_once "require_once_1.php";
?>

在命令行执行

php ./require_once_2.php
 
#输出:
require_once_1 is require_once

多次包含同一个文件

在文件require_once_2.php中多次包含require_once_1.php

require_once_2.php
<?php
require_once "require_once_1.php";
require_once "require_once_1.php";
require_once "require_once_1.php";
?>

在命令行执行

php ./require_once_2.php
 
#输出:
require_once_1 is require_once

多次包含同一个文件,被包含的文件代码只会执行一次。

包含一个不存在的文件

在文件require_once_2.php中,包含不存在的文件require_once_no_exist.php

require_once_2.php
<?php
require_once "require_once_no_exist.php";
echo "here end" . PHP_EOL;
?>

在命令行执行

php ./require_once_2.php
 
#输出:
PHP Warning:  require_once(require_once_no_exist.php): failed to open stream: No such file or directory in /phpdemo/require_once_2.php on line 2
PHP Fatal error:  require_once(): Failed opening required 'require_once_no_exist.php' (include_path='.:') in /phpdemo/require_once_2.php on line 2

报错了,程序终止,没能执行完。

include_once

我们有个文件include_once_1.php,在文件include_once_2.php中包含include_once_1.php

include_once_1.php
<?php
echo "include_once_1 is include_once" . PHP_EOL;
?>
include_once_2.php
<?php
include_once "include_once_1.php";
?>

在命令行执行

php ./include_once_2.php
 
#输出:
include_once_1 is include_once

多次包含同一个文件

在文件include_once_2.php中多次包含include_once_1.php

include_once_2.php
<?php
include_once "include_once_1.php";
include_once "include_once_1.php";
include_once "include_once_1.php";
?>

在命令行执行

php ./include_once_2.php
 
#输出:
include_once_1 is include_once

多次包含同一个文件,被包含的文件代码只会执行一次。

包含一个不存在的文件

在文件include_once_2.php中,包含不存在的文件include_once_no_exist.php

include_once_2.php
<?php
include_once "include_once_no_exist.php";
echo "here end" . PHP_EOL;
?>

在命令行执行

php ./include_once_2.php
 
#输出:
PHP Warning:  include_once(include_once_no_exist.php): failed to open stream: No such file or directory in /phpdemo/include_once_2.php on line 2
PHP Warning:  include_once(): Failed opening 'include_once_no_exist.php' for inclusion (include_path='.:') in /phpdemo/include_once_2.php on line 2
here end

报警告,程序继续执行。

总结

被包含文件先按参数给出的路径查找,如果没有给出目录(只有文件名)时则按照 include_path 指定的目录查找。

如果在 include_path 下没找到该文件则 includeinclude_oncerequirerequire_once

最后才在调用脚本文件所在的目录和当前工作目录下寻找。如果最后仍未找到文件则 :

includeinclude_once 会发出一条警告,继续执行后续代码。
requirerequire_once 会报致命错误,终止程序

当多次包含同一个文件时:

includerequire 会多次引入文件。
include_oncerequire_once 只会引入文件一次。

在编写面向对象(OOP) 程序时,通常为每个类新建一个 PHP 文件。 这会带来一个烦恼:每个脚本的开头,都需要包含(include/require/include_once/require_once)一个长长的列表。

下面我们学习 ☞ PHP类的自动加载