我已经想了一段时间了,我还没有看到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。