PHP における require_once と include の比較
開発者の場合、開発サイクル中に、開発ディレクトリまたは本番ディレクトリ全体で異なる PHP ファイルを分離しますが、別の PHP ファイルに関数またはクラスが必要になる場合があります。同じクラスまたは関数を別のファイルで繰り返すことは、直感に反し、DRY アプローチに反します。
したがって、PHP には、別の PHP ファイルのコンテンツを追加またはアクセスできるようにするための 4つのキーワード、include
、require
、include_once
、および require_once
があります。この記事では、すべてのキーワードについて検討しますが、require_once
と include
に焦点を当てます。
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_once
と include
キーワードを使用する場合
include
または require
を使用するための適切な領域があります。常に require
を使用することをお勧めします。ただし、現在の PHP ファイルに追加する予定の PHP ファイルのコンテンツがなくてもアプリケーションで実行できる場合は、問題がない可能性があります。
include
、require
、および 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_once
とrequire_once
は正常に機能しますが、すべてのコンテンツが呼び出されて再宣言されます。include_once
とinclude_once
は正常に機能しますが、すべてのコンテンツが呼び出されて再宣言されます。
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