避免重复PHP include/require


avoid duplication of php include/require

我已经想了一段时间了,我还没有看到SE的答案。

当在php中使用include时,我的工作理解是任何包含的代码都将由服务器处理。

这意味着在下面的条件中,两个大的代码块都在服务器上处理,即使只有其中一个包含将被使用。

<?php
if($conditional === TRUE){
    include("MASSIVEAMOUNTOFCODE.php");
}
else {
    include("GARGANTUANAMOUNTOFCODE.php");
}
?>

(请原谅这里过于简化的代码)

我最近开始使用下面的结构来执行相同的任务,目的是节省服务器上的处理时间。请告诉我,如果这只加载一个包含文件,或者如果我是在一个傻瓜的差事:
<?php
if($conditional === TRUE){
    $includeFile = "MASSIVEAMOUNTOFCODE.php";
}
else {
    $includeFile = "GARGANTUANAMOUNTOFCODE.php";
}
include("$includeFile");
?>

请注意,在第一个示例中,"include"使用了两次,而在第二个示例中,"include"只使用了一次。

您最初认为两个文件都被处理的假设是错误的。代码块中从未执行过的include语句将被忽略。

您可以通过在未执行分支的include文件中放置语法错误来看到这是正确的。我:

testinclude.php:

<?php
if (false) 
    include 'badinclude.php';
echo "done'n";

badlinclude.php:

<?php
$foo =;

当我执行testinclude.php时,没有抱怨badlinclude.php中的语法错误。但是,如果我将if (false)更改为if (true),我会得到一个错误。

解析错误:语法错误,意外';'在/Users/barmar/badinclude.php第3行

所以这两个版本的代码应该是相等的

你的假设是错误的。

include所做的是,当函数被调用时,它将在调用该函数的相同环境中加载该文件作为一个新的PHP文件。

的例子:

test.php:

<?php $test = 'test'; include('test2.php'); ?>

test2.php:

<?php echo $test; ?>

这将输出:

test

回到你问的问题,它不会处理两个文件,因为当一个函数被调用时,如果某项为真,而另一个函数被调用时,它不能同时调用两个函数。Include和其他普通函数一样,在调用之前不会执行。

如果你想确保一个文件只被包含一次,或者甚至要求它被加载一次,那么使用include_once或require_once。