迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > PHP >

PHP 中的 require_once 与 include

作者:迹忆客 最近更新:2023/03/23 浏览次数:

对于开发人员,在开发周期中,我们在开发或生产目录中分隔不同的 PHP 文件,但我们可能需要另一个 PHP 文件中的函数或类。在另一个文件中重复相同的类或函数是违反直觉的,并且违反 DRY 方法。

因此,PHP 有四个关键字来添加或访问另一个 PHP 文件的内容,includerequireinclude_oncerequire_once。在本文中,我们将考虑所有关键字,但我们将更多地关注 require_onceinclude


何时在 PHP 中使用 includerequire 关键字

关键字 includerequire 将所有内容、文本或代码或标记从指定的 PHP 文件复制到包含语句的目标 PHP 文件中。然而,include 关键字在处理失败时的行为与 require 不同。

  • require 产生 fatal error (E_COMPILE ERROR) 并停止脚本。
  • include 只产生一个 warning (E_WARNING),即使下一部分需要你包含的 PHP 文件中的代码,脚本也会继续。

如果没有发生错误,则两个关键字的方式相同。

让我们尝试添加一个简单的 PHP 文件(variables.php),其中包含几个变量到我们当前的 PHP 文件中。

variables.php 文件:

<?php

$team = 'Golden State Warriors';
$fav_player = 'Steph Curry';

?>

现在,让我们使用 include 关键字来添加 variables.php 的内容:

<?php

echo "My favourite player is $fav_player and he plays for $team";

include 'variables.php';

echo "My favourite player is $fav_player and he plays for $team";

?>

上述代码片段的输出:

My favourite player is and he plays for

My favourite player is Steph Curry and he plays for Golden State Warriors

如你所见,第一行没有输出变量的内容,因为我们没有包含 variables.php 文件,但是一旦我们添加它,它就有了变量的内容。

现在,让我们使用 require 关键字:

<?php

echo "My favourite player is $fav_player and he plays for $team";

include 'variables.php';

echo "My favourite player is $fav_player and he plays for $team";

?>

输出:

My favourite player is and he plays for

My favourite player is Steph Curry and he plays for Golden State Warriors

产生了相同的输出。现在,让我们在代码中拼错 variables.php 文件,看看效果。

对于 include 关键字:

My favourite player is and he plays for

Warning: include(variable.php): failed to open stream: No such file or directory in /home/runner/Jinku/index.php on line 5

Warning: include(): Failed opening 'variable.php' for inclusion (include_path='.:/nix/store/bq7pj5lz7rq92p3d3qyy25lpzic9phy5-php-7.4.21/lib/php') in /home/runner/Jinku/index.php on line 5

My favourite player is and he plays for

对于 require 关键字:

My favourite player is and he plays for

Warning: require(variable.php): failed to open stream: No such file or directory in /home/runner/Jinku/index.php on line 5

Fatal error: require(): Failed opening required 'variable.php' (include_path='.:/nix/store/bq7pj5lz7rq92p3d3qyy25lpzic9phy5-php-7.4.21/lib/php') in /home/runner/Jinku/index.php on line 5

你现在可以看到两者之间的区别。使用 include 关键字,即使包含的文件不存在并且只给出警告,代码也会继续执行。

但是,使用 require 关键字时,代码会产生致命错误并在此时完全停止。


何时在 PHP 中使用 require_onceinclude 关键字

有适当的区域可以使用 includerequire。建议一直使用 require;但是,如果你的应用程序可以在没有我们打算添加到当前 PHP 文件的 PHP 文件中的内容的情况下运行,则可能不会出现问题。

为了提供更多上下文来理解 includerequirerequire_once 关键字,让我们尝试一个示例。对于这个例子,我们将创建一个 functions.php 文件,该文件将被包含在内并需要展示差异。

functions.php 文件:

<?php

function add_sums($a, $b) {
  return $a + $b;
}

?>

让我们使用 include

<html>
  <head>
    <title>PHP Test</title>
  </head>
  <body>
    <?php
    include 'functions.php';

        echo "The program is starting\n";
    $sum = add_sums(2,3);

    echo "The program is done\n";
    echo $sum;
    ?>
  </body>
</html>

代码片段的输出:

The program is done 5

让我们使用 require

<html>
  <head>
    <title>PHP Test</title>
  </head>
  <body>
    <?php
    require 'functions.php';

        echo "The program is starting\n";
    $sum = add_sums(2,3);

    echo "The program is done\n";
    echo $sum;
    ?>
  </body>
</html>

代码片段的输出:

The program is done 5

但是,如果 functions.php 文件不可用,而我们使用 include,则输出如下:

Warning: include(functions.php): failed to open stream: No such file or directory in /home/runner/Jinku/index.php on line 7

Warning: include(): Failed opening 'functions.php' for inclusion (include_path='.:/nix/store/bq7pj5lz7rq92p3d3qyy25lpzic9phy5-php-7.4.21/lib/php') in /home/runner/Jinku/index.php on line 7

The program is starting

Fatal error: Uncaught Error: Call to undefined function add_sums() in /home/runner/Jinku/index.php:9 Stack trace: #0 {main} thrown in /home/runner/Jinku/index.php on line 9

尽管 functions.php 不存在,但代码仍在运行,直到由于调用未定义的函数而发生致命错误,这不是在 PHP 应用程序中工作的有效方法。

但是,当我们使用 require 时,错误如下所示:

Warning: require(functions.php): failed to open stream: No such file or directory in /home/runner/Jinku/index.php on line 7

Fatal error: require(): Failed opening required 'functions.php' (include_path='.:/nix/store/bq7pj5lz7rq92p3d3qyy25lpzic9phy5-php-7.4.21/lib/php') in /home/runner/Jinku/index.php on line 7

因为我们使用了 require 关键字,我们可以防止由于调用未定义函数而导致的致命错误。对于相当复杂的 PHP 应用程序,require 将更适合能够快速捕获错误并防止不必要的后果。

现在,让我们更进一步。让我们使用 require_once 关键字:

<html>
  <head>
    <title>PHP Test</title>
  </head>
  <body>
    <?php
        // Previous code START
    require_once 'functions.php';

        echo "The program is starting\n";
    $sum = add_sums(2,3);

    echo "The program is done\n";
    echo $sum;
        // Previous code ENDS

        // Additional code STARTS

    echo "Another program begins";
    require 'functions.php';
    $sum = add_sums(2,3);
    echo $sum;
    echo "Another program ends";
    ?>
  </body>
</html>

上述代码片段的输出会产生一个致命错误:

The program is starting
The program is done
5
Another program begins

Fatal error: Cannot redeclare add_sums() (previously declared in /home/runner/Jinku/functions.php:3) in /home/runner/Jinku/functions.php on line 3

require_once 关键字将检查文件是否已被包含,如果是,则不再包含或要求它。因此,因为我们之前使用了 require_once 关键字,它可以防止要求甚至包含 functions.php 中的代码。

你可能希望这样做以防止重新声明函数调用或变量值分配,这对你的代码来说可能代价高昂。

在示例中,如果我们使用 require 两次,它将再次调用该函数并产生与之前相同的效果,结果为 5。

组合来理解。

  • requirerequire_once 将引发致命错误。
  • includeinclude_once 将引发致命错误。
  • require_oncerequire_once 可以正常工作,但所有内容将被召回和重新声明。
  • include_onceinclude_once 可以正常工作,但所有内容将被召回和重新声明。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 C++ 中通过掷骰子生成随机值

发布时间:2023/04/09 浏览次数:169 分类:C++

本文解释了如何使用时间因子方法和模拟 C++ 中的掷骰子的任意数方法生成随机数。了解它是如何工作的以及它包含哪些缺点。提供了一个 C++ 程序来演示伪数生成器。

在 C++ 中使用模板的链表

发布时间:2023/04/09 浏览次数:158 分类:C++

本文解释了使用模板在 C++ 中创建链表所涉及的各个步骤。工作程序演示了一个链表,该链表使用模板来避免在创建新变量时声明数据类型的需要。

在 C++ 中添加定时延迟

发布时间:2023/04/09 浏览次数:142 分类:C++

本教程将为你提供有关在 C++ 程序中添加定时延迟的简要指南。这可以使用 C++ 库为我们提供的一些函数以多种方式完成。

在 C++ 中创建查找表

发布时间:2023/04/09 浏览次数:155 分类:C++

本文重点介绍如何创建查找表及其在不同场景中的用途。提供了三个代码示例以使理解更容易,并附有代码片段以详细了解代码。

如何在 C++ 中把字符串转换为小写

发布时间:2023/04/09 浏览次数:63 分类:C++

介绍了如何将 C++ std::string 转换为小写的方法。当我们在考虑 C++ 中的字符串转换方法时,首先要问自己的是我的输入字符串有什么样的编码

如何在 C++ 中确定一个字符串是否是数字

发布时间:2023/04/09 浏览次数:163 分类:C++

本文介绍了如何检查给定的 C++ 字符串是否是数字。在我们深入研究之前,需要注意的是,以下方法只与单字节字符串和十进制整数兼容。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便