【问题标题】:include and include_once in PHPPHP 中的 include 和 include_once
【发布时间】:2011-06-16 15:28:35
【问题描述】:

有人可以向我解释什么时候应该使用includeinclude_once 以及应该如何使用它。

我是 PHP 新手,想了解这是外行术语。对php.net 的 PHP 文档中提到的内容不太清楚。

假设我有以下文件夹结构

-->Root-->API-->User.php

-->Root-->用户-->CreateUser.php

如果我必须在CreateUser.php 中使用User.php,我应该怎么做。

如果下面还有其他文件

-->Root-->API-->Utility-->ImageProcessor.php

我应该如何将ImageProcessor.php 包含在CreateUser.php

【问题讨论】:

    标签: php include


    【解决方案1】:

    如果你总是include_once 一切都会好起来的。它可以防止包含相同的文件两次。

    假设您有这些文件:

    c:include b; include a;

    b:include a;

    a:echo "hello";

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

    它会带来一点性能成本,但如果您不是 Facebook 左右,这并不是很大的成本。

    【讨论】:

    • 这似乎完美地回答了这些问题,但我想指出@AllisonC 提出了一个很好的观点,即这可能是 require/_once 而不是 include/_once 的地方。当然 require 比 include 有额外的开销,但这对你来说可能并不重要。
    • 我在想 require 是 include 的别名。
    • 实际上,如果找不到文件,则 require 将出现致命错误,而 include 将发送警告。
    【解决方案2】:

    我将使用简单的例子,一个include()更好的情况,一个include_once()更好的情况。

    假设您有文件 a.phpb.php 。它们每个都“包含”library.php,其中包含函数foo()。 现在,如果您尝试在另一个文件中同时使用a.phpb.php include,例如index.php,您可能会收到一条错误消息,指出foo() 已被声明。这意味着include_once() 更适合这种情况。您将避免两次定义相同的函数。

    第二种情况。假设您每次循环运行时都想includefile.phpfile.php 的内容可能只是简单的 HTML 输出。

    file.php:

    <?php echo "User No: " . $i; ?>
    

    index.php:

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

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

    【讨论】:

      【解决方案3】:

      当涉及隐式嵌套需求(任何更好的术语?)时,使用include_once。我的意思是这样的:

      假设

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

      因为model需要数据库连接,所以A和B都是includes C.A部门由在那里工作的员工组成,所以Aincludes B.include_once,数据库模块只会被包含一次,所以有不会出现任何重复的声明错误。

      Include 用于更通用的东西,例如有意设计多次出现的输出模板(可能回显活动用户名)。

      【讨论】:

        【解决方案4】:

        CreateUser.php:

        <pre><code>
        include_once("/API/User.php");
        include_once("/API/Utility/ImageProcessor.php");
        </pre></code>
        

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

        【讨论】:

        • API前面的/是否总是指include_path?
        • 指根目录
        • 对我来说听起来很完美....但是我看到编写帮助类以增强 include_once 的性能。这真的会提高性能吗? artima.com/forums/flat.jsp?forum=271&thread=99835
        • 我刚刚做了一个小测试,使用了 include_once() 和 require_once() 与那个包装函数。内置功能赢得了 5-10%。我认为它在 2005 年有所不同。当时不是用 php 编程,所以不能说。
        • 快速提问,使用 include_once "file.php" 和 include_once("file.php") 有什么区别
        【解决方案5】:

        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()function,所以我的HEADER.PHP应该是这样的: HEADER.PHP:

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

        现在当我打开HEADER.PHP 时,我不会再收到错误了,因为PHP 只知道include 文件FUNCTIONS.PHP 只一次 因此,为避免出错,在 PHP 代码中使用 include_once() 而不是 include() 函数是安全的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-07-08
          • 2016-02-24
          • 2011-01-25
          • 2011-12-08
          相关资源
          最近更新 更多