PHP における require_once と include の比較

Olorunfemi Akinlua 2023年1月30日
  1. PHP で include キーワードと require キーワードを使用する場合
  2. PHP で require_onceinclude キーワードを使用する場合
PHP における require_once と include の比較

開発者の場合、開発サイクル中に、開発ディレクトリまたは本番ディレクトリ全体で異なる PHP ファイルを分離しますが、別の PHP ファイルに関数またはクラスが必要になる場合があります。同じクラスまたは関数を別のファイルで繰り返すことは、直感に反し、DRY アプローチに反します。

したがって、PHP には、別の PHP ファイルのコンテンツを追加またはアクセスできるようにするための 4つのキーワード、includerequireinclude_once、および require_once があります。この記事では、すべてのキーワードについて検討しますが、require_onceinclude に焦点を当てます。

PHP で include キーワードと require キーワードを使用する場合

キーワード include および require は、すべてのコンテンツ、テキスト、コード、またはマークアップを、指定された PHP ファイルから include ステートメントのターゲット PHP ファイルにコピーします。ただし、include キーワードは、失敗の処理において require とは異なる動作をします。

  • require致命的なエラーE_COMPILE ERROR)を生成し、スクリプトを停止します。
  • include警告E_WARNING)のみを生成し、次のセクションでインクルードした PHP ファイルのコードが必要な場合でもスクリプトは続行されます。

エラーが発生しない場合、両方のキーワードは同じ方法です。

現在の PHP ファイルにいくつかの変数を保持する単純な PHP ファイル(variables.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 キーワードを使用する場合

include または require を使用するための適切な領域があります。常に require を使用することをお勧めします。ただし、現在の PHP ファイルに追加する予定の PHP ファイルのコンテンツがなくてもアプリケーションで実行できる場合は、問題がない可能性があります。

includerequire、および require_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 を 2 回使用すると、関数が再度呼び出され、以前と同じ効果が得られ、値は 5 になります。

組み合わせ理解する:

  • require および require_once は致命的なエラーをスローします。
  • include および include_once は致命的なエラーをスローします。
  • require_oncerequire_once は正常に機能しますが、すべてのコンテンツが呼び出されて再宣言されます。
  • include_onceinclude_once は正常に機能しますが、すべてのコンテンツが呼び出されて再宣言されます。
Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn

関連記事 - PHP File