避免重复php include / require

时间:2016-09-21 19:07:41

标签: php performance include

我一直想知道这一点,我还没有在SE中看到答案。

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

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

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

(请在此赦免严重简化的代码。)

我最近开始使用以下结构执行相同的任务,目的是节省服务器上的处理时间。 请告诉我,如果只加载一个包含文件,或者我是傻瓜的差事:

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

include("$includeFile");
?>

注意&#34;包含&#34;的双重用法在第一个样本中,只有一次使用&#34;包括&#34;在第二个样本中。

2 个答案:

答案 0 :(得分:2)

您最初处理这两个文件的假设是错误的。 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),我会收到错误。

  

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

因此,您的代码的两个版本应该是等效的。

答案 1 :(得分:-1)

你的假设是错误的。

include所做的是当函数调用时,它会将文件作为新的PHP文件加载到与调用它相同的环境中。

示例:

test.php的:

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

test2.php:

<?php echo $test; ?>

这将输出:

test

回到你提出的问题,它不会处理这两个文件,因为如果某些东西是真的,它就不能同时执行这两个函数调用,如果不是,则不能执行另一个函数调用。 include就像任何其他普通函数一样,因为它在被调用之前不会被执行。

如果您想确保文件只包含一次,甚至要求加载一次,请使用include_oncerequire_once