迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > 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 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Arduino 中停止循环

发布时间:2024/03/13 浏览次数:444 分类:C++

可以使用 exit(0),无限循环和 Sleep_n0m1 库在 Arduino 中停止循环。

Arduino 复位

发布时间:2024/03/13 浏览次数:315 分类:C++

可以通过使用复位按钮,Softwarereset 库和 Adafruit SleepyDog 库来复位 Arduino。

Arduino 的字符转换为整型

发布时间:2024/03/13 浏览次数:181 分类:C++

可以使用简单的方法 toInt()函数和 Serial.parseInt()函数将 char 转换为 int。

Arduino 串口打印多个变量

发布时间:2024/03/13 浏览次数:381 分类:C++

可以使用 Serial.print()和 Serial.println()函数在串口监视器上显示变量值。

Arduino if 语句

发布时间:2024/03/13 浏览次数:123 分类:C++

可以使用 if 语句检查 Arduino 中的不同条件。

Arduino ICSP

发布时间:2024/03/13 浏览次数:214 分类:C++

ICSP 引脚用于两个 Arduino 之间的通信以及对 Arduino 引导加载程序进行编程。

使用 C++ 编程 Arduino

发布时间:2024/03/13 浏览次数:127 分类:C++

本教程将讨论使用 Arduino IDE 在 C++ 中对 Arduino 进行编程。

Arduino 中的子程序

发布时间:2024/03/13 浏览次数:168 分类:C++

可以通过在 Arduino 中声明函数来处理子程序。

扫一扫阅读全部技术教程

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

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便