PHP中的include和include_once

8
请问什么情况下应该使用includeinclude_once,如何使用它们?
我是PHP新手,希望以通俗易懂的方式理解。在php.net上阅读的文档并不太清晰。
假设我有以下文件夹结构:
-->根目录-->API-->User.php -->根目录-->Users-->CreateUser.php 如果我需要在CreateUser.php中使用User.php,应该如何实现呢?
如果另一个文件位于以下路径下:
-->根目录-->API-->Utility-->ImageProcessor.php 那么我应该如何在CreateUser.php中包含ImageProcessor.php呢?
5个回答

17

如果您始终使用include_once,一切都会没问题。这可以防止重复包含同一个文件。

假设您有以下这些文件:

cinclude b; include a;

binclude a;

aecho"hello";

当您执行c时,a将被包含两次(很可能是不需要的情况),因此如果您将它们全部使用include_once,则只会调用一次。

尽管这会带来一点性能成本,但如果您不是Facebook或类似的公司,那么这并不是一个显著的成本。


这似乎完美地回答了问题,但我想指出@AllisonC提出的一个好观点,即这可能是需要require/_once而不是include/_once的地方。当然,相对于include,require有额外的开销,但这对您来说可能并不重要。 - ben
我曾认为 require 是 include 的别名。 - ahmet alp balkan
实际上,如果文件未找到,require将会致命错误,而include则会发送警告。 - ben

4
CreateUser.php文件中:
<pre><code>
include_once("/API/User.php");
include_once("/API/Utility/ImageProcessor.php");
</pre></code>

如果需要确保这些文件被包含,应该使用require_once


在API前面的斜杠是否总是指include_path? - Abishek
它指的是根目录。 - AllisonC
对我来说听起来很完美...但是我看到编写了帮助类来增强include_once的性能。这真的会提高性能吗?http://www.artima.com/forums/flat.jsp?forum=271&thread=99835 - Abishek
我刚做了个小测试,使用 include_once() 和 require_once() 与那个包装函数进行比较。内置函数获胜了5-10%。我猜2005年的情况有所不同。当时没有用php编程,所以无法确定。 - afaf12
快速问题,使用 include_once "file.php" 和 include_once("file.php") 有什么区别? - Abishek

4
我将使用简单的例子来解释,一个是在何时使用include()更好,另一个是在何时使用include_once()更好。
假设您有文件a.phpb.php。它们都“包含”包含函数foo()library.php。 现在,如果您尝试在另一个文件index.php中同时include a.phpb.php,则可能会出现错误,指出foo()已经声明过了。这意味着在这种情况下更适合使用include_once()。您将避免定义相同的函数两次。
第二种情况。假设您想每次循环运行时都includefile.phpfile.php的内容可以只是简单的HTML输出。
<?php echo "User No: " . $i; ?>

index.php:

<?
for($i=1; $i<=10; $i++){
include("file.php");
}

在这种情况下,include()更好,因为它会在每次循环运行时都包含文件。include_once()只能在第一次工作。

4

当存在隐式嵌套需求时(是否有更好的术语?),请使用include_once。我的意思是这样的:

假设

  • A 是部门模型
  • B 是员工模型
  • C 是数据库模块

由于模型需要数据库连接,因此A和B都会includes C。一个部门由在那里工作的员工组成,所以A包括B。通过使用include_once,数据库模块仅被包含一次,因此不会出现任何重复声明错误。

当需要多次出现像输出模板(也许是打印活动用户名)这样更通用的东西时,请使用include


1

include_once()语句在脚本执行期间包含并评估指定的文件。这类似于include()语句的行为,唯一的区别是如果已经包含了来自文件的代码,它将不会再次包含。正如其名称所示,它只会被包含一次。例如,假设我有三个文件:

文件:

  1. FUNCTIONS.PHP
  2. GLOBALS.PHP
  3. HEADER.PHP

每个文件的外观如下:

FUNCTIONS.PHP

<?php 
function foo(){ 
 echo 'some code'; 
} 
?>

GLOBALS.PHP:

<?php 
 include('FUNCTIONS.PHP'); 
 foo(); 
?>

HEADER.PHP:

<?php 
 include('FUNCTIONS.PHP'); 
 include('GLOBALS.PHP'); 
 foo();
?>

现在,如果您尝试打开HEADER.PHP,会出现错误,因为GLOBALS.PHP已经包含了FUNCTIONS.PHP。您将收到一个错误,表明函数foo()已经在GLOBALS.PHP中声明,并且我也在HEADER.PHP中包含了它 - 这意味着我已经两次包含了FUNCTIONS.PHP
因此,为了确保我只包含FUNCTIONS.PHP一次,我应该使用include_once()函数,所以我的HEADER.PHP应该像这样:
<?php 
 include_once('FUNCTIONS.PHP'); 
 include('GLOBALS.PHP'); 
?>

现在当我打开HEADER.PHP时,不会再出现错误了,因为PHP知道只需要include一次FUNCTIONS.PHP文件。因此,为避免出错,在您的PHP代码中最好使用include_once()代替include()函数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接