ホームページ >バックエンド開発 >PHPチュートリアル >require、include、require_once および include_once 区别
1.require() ステートメント
require() ステートメントは、C 言語の include() ステートメントと同様に、ステートメント自体の代わりにファイルを指定するために使用されます。 PHP 構成ファイル php.ini 内の URL fopen ラッパーがオンになっている場合 (デフォルトでオンになっています)、URL を使用してファイルの場所を指定し、リモート ファイル呼び出しを行うことができます。
1 つは、require() ステートメントと include() ステートメントを使用するときに特別な注意を払うことです。つまり、インクルードされたファイルでは、プロセッサは HTML モードに従ってコンテンツを解釈し、インクルードされたコンテンツを処理した後、PHP モードに戻ります。したがって、インクルードされたファイルで PHP 構文を使用する必要がある場合は、正しい PHP 開始タグと終了タグを使用してこれらのステートメントをインクルードする必要があります。
require() と include() は PHP の言語機能であり、関数ではありません。これらは多くの点で関数とは異なります。
例: require() に含まれるファイルには制御構造を含めることはできず、return などのステートメントは使用できません。 require() に含まれるファイルで return ステートメントを使用すると、処理エラーが発生します。 include() ステートメントとは異なり、require() ステートメントは、これらのステートメントが実行されるかどうかに関係なく、含まれるファイルの内容を無条件に読み取ります。したがって、異なる条件に従って異なるファイルをインクルードする場合は、include() ステートメントを使用する必要があります。もちろん、require() の位置にあるステートメントが実行されない場合、require() に含まれるファイル内のステートメントも実行されません。
require() は、ループ本体内の異なる条件に基づいて異なるファイルを含めることはできません。 require() ステートメントは、ステートメント自体を置き換えるために初めて実行されるときにのみ、ステートメントに含まれるファイルの内容を呼び出します。再度実行されるときは、最初に含まれるステートメントのみが実行されます。ただし、 include() ステートメントでは、ループ本体にさまざまなファイルを含めることができます。
require() ステートメント内の変数は、require() ステートメントが配置されている変数スコープを継承します。 require() ステートメントの場所でアクセスできるすべての変数は、require() ステートメントに含まれるファイル内でアクセスできます。 require() ステートメントが関数内にある場合、インクルードされたファイル内のステートメントは関数内で定義されているものと同等になります。
require() ステートメントは、PHP プログラムが実行される前に require によって参照されるファイルを読み取るため、通常、require はプログラムの先頭に置かれます。したがって、require ステートメントは少し強力であるという事実に特別な注意を払う必要があります。プログラムが参照ファイルを本当に必要とするかどうかに関係なく、require ステートメントを使用する限り、参照ファイルが含まれてしまいます。この関数を使用して条件制御ステートメントにインクルードすると、条件が true でなくても、参照されたファイルがインクルードされます。ゾンビが形成されると、操作中に目に見える影響はありませんが、明らかに負担が増加しますので、特に注意してください。 require ステートメントを使用してインクルード エラーが発生した場合、プログラムはエラー メッセージを出力して実行を停止します。 !
require() ステートメントにファイルの URL を宣言することによってリモート ファイルが含まれており、リモート サーバーが PHP コードに従ってファイルを解釈する場合、ローカル PHP ファイルに含まれるコンテンツはリモート サーバーでの処理の結果です。例:
コードをコピーします コードは次のとおりです:
/*
この例では、some_server サーバーは .php ファイルを解釈できるが、.txt ファイルは解釈できないことを前提としています。リモート ファイル
need 変数 $varfirst と $varfirst
*/
/* が正しく実行できないため、リモート サーバーは .txt ファイルを処理しません*/
require("http://some_server/file.txt?varfirst= 1&varsec>
/*不正解です。file.php ファイルはローカル マシン上でのみ見つかります*/
require("file.php?varfirst=1&varsec>
/*正しいステートメント*/
require("http://some_server /file.php?varfirst=1&varsec>
$varfirst=1; /*正しいステートメント*/
正しいステートメント*/
$files=array('first.php','first.php','third.php');
for($i=0;$i
include $files[$i];
}
?>
コードをコピーします コードは次のとおりです:
echo "Before the return
n" ;
if(1)
{
return 27;
echo "After the return
?> main.php ファイルに次のステートメントが含まれているとします。コードをコピーします
コードは次のとおりです:
php3.0 の説明 コンパイラは 2 行目でエラーを報告し、include() ステートメントの戻り値を取得できません。しかし、php4.0 では、次の結果が得られます:
リターン前
返されたファイル: '27'
main.php が次のように変更されたと仮定します:
の出力結果php4.0 の出力は次のとおりです: Before the return
Back in main.html
php5.0 の出力も次のようになります:
そして、fool .inc:
コードをコピーします
コードは次のとおりです:
require ("util.inc");
function showVar($var)
{
{ var_dump($var) } ?> 次に、これら 2 つのファイルを error_require に含めます。 php:
コードをコピーします
コードは次のとおりです:
require("fool.inc")
require("util.inc");// この文は次のようになります。エラーが発生します
$foo=array("1" ,array("complex","quaternion"));
echo "これはまた util.inc を必要としますが、これも
n です"; .incn";
echo "goodTea を実行中:".goodTea()."
n";
echo "foo:
n を印刷中";
showVar($foo);
?>
include_once("a.php") // this .php が含まれます include_once("A.php"); // Windows では、.php が再度含まれます! (PHP 4 のみ)
この動作は PHP 5 で変更されました。が最初に指定されているため、C:PROGRA~1A.php と C:Program Filesa.php の実装は同じであり、ファイルは 1 回だけインクルードされます。
インクルードするファイルが存在しない場合、include は通知を求め、次のステートメントの実行を続行します。require は致命的なエラーを表示して終了します。
function r($file_name) { $filenum=@fopen($file_name,"r"); @flock( $filenum,LOCK_SH );
$file_data=@fread($filenum,filesize($file_name));$file_data を返す
}
関数 w($file_name,$data,$method) ="w" ){
$filenum=@fopen($file_name,$method);
$file_data=fwrite($filenum,$data); $file_data を返す
}
上記では、require、include、require_once、および include_once の違いを、関連する側面も含めて紹介しました。PHP チュートリアルに興味のある友人にとって役立つことを願っています。