在PHP中:

什么时候应该使用require和include? 什么时候应该使用require_once vs. include_once?


当前回答

对于可重用的PHP模板,使用“include”。使用“require”表示必需的库。

“*_once”很好,因为它检查文件是否已经加载,但它只在“require_once”中对我有意义。

其他回答

Include()在未找到文件时将生成警告,但require_once()将生成致命错误。

另一件事是之前是否包含了file。然后require_once()将不再包含它。

在PSR-0 / PSR-4自动加载器时代,如果您所需要的只是让一些函数/类对您的代码可用,则可能完全没有必要使用任何语句(当然,如果您仍然使用PHP作为模板引擎,则仍然需要在引导文件中require_once自动加载器本身并包含模板)。

我使用的函数如下:

function doSomething() {
    require_once(xyz.php);
    ....
}

在xyz.php中声明了常量值。

我必须从另一个PHP脚本文件调用这个doSomething()函数。

但是我观察到在循环中调用此函数时的行为,对于第一次迭代doSomething()在xyz.php中获得常量值,但后来每次迭代doSomething()都无法获得xyz.php中声明的常量值。

我通过从require_once()切换到include()来解决我的问题,更新的doSomething()代码如下:

function doSomething() {
    include(xyz.php);
    ....
}

现在对doSomething()的每次迭代调用都得到xyz.php中定义的常量值。

基本上,如果您需要一个错误的路径,PHP会抛出一个致命错误,并调用shutdown函数,但是当您包含一个错误的路径时,PHP将继续执行,但它只会显示一个警告,表明文件不存在。

根据英文单词require, PHP被告知页面或文件的执行取决于所需的文件。

根据我的经验,通常需要重要的文件,如配置文件、数据库类和其他重要的实用程序。

Include / Require你也可以包含同一个文件不止一次:

require()与include()相同,除了失败时,它也会产生致命的E_COMPILE_ERROR级别的错误。换句话说,它将停止脚本,而include()只发出一个允许脚本继续的警告(E_WARNING)。

Require_once / include_once

和include/require是一样的,除了PHP会检查文件是否已经被包含,如果已经被包含,就不再包含(require)它。