ホームページ  >  記事  >  バックエンド開発  >  PHP の基礎学習 - equire()、include()、require_once() および include_once() の類似点と相違点の詳細な説明

PHP の基礎学習 - equire()、include()、require_once() および include_once() の類似点と相違点の詳細な説明

WBOY
WBOYオリジナル
2016-06-13 13:04:061283ブラウズ

PHP の基本学習 -- equire()、include()、require_once()、include_once() の類似点と相違点の詳細な説明

require()、include()、require_once() および include_once()

require()include() には多くの類似点といくつかの相違点があります。それらの違いを理解することが重要です。理解していないと間違いを犯しやすくなります。

?

読者が比較して学べるように、これら 2 つの文をまとめて紹介します。

1.require()ステートメント

???? require() ステートメントは、C 言語の include() ステートメントは同じです。 php 設定ファイル php.ini 内の URL のラッパー を開きます ( はデフォルトでオンになっています )URL を使用できますファイルの場所を指定してリモート ファイル呼び出しを実行します。

???? 1 つは、require()include() ステートメントに特に注意してください。つまり、インクルードされたファイルでは、プロセッサは html モードに従ってコンテンツを解釈し、インクルードされたコンテンツを処理した後、 php に戻ります。 >モード。したがって、インクルードされたファイルで php 構文を使用する必要がある場合は、正しい php 開始タグと終了タグを使用して区切る必要があります。これらの声明が含まれていました。

???? require() および include()knowledgephp は言語機能ですが、関数。これらは多くの点で関数とは異なります。

例:

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 ステートメントを使用してエラーが発生した場合、プログラムはエラー メッセージを出力して実行を停止します。 !

?

??? 🎜>URL にリモート ファイルが含まれており、リモート サーバーが php コード、ローカルの phpファイルに含まれるコンテンツは、リモート サーバーでの処理の結果です。例: ???? /*

????????? この例では、some_server

サーバーが .php ファイルを解釈できるが、.txt ファイルを説明します。リモート ファイル 内ですか? ???? には変数 $varfirst

および

$varsecond が必要です ???? */

??? /* を正しく実行できません。リモート サーバーは .txt

ファイル

*/ ??? require("http://some_server/file.txt?varfirst=1&varsecond=2");

???

???

/* は正しくないため、file.phpfile

*/ ??? require("file.php?varfirst=1&varsecond=2"); ?

??? /*

正しいステートメント

*/

??? require("http://some_server/file.php?varfirst=1&varsecond=2"); ???

???

$varfirst=1;

???

$varsecond=2;

???

require("file.txt"); /*

正しいステートメント*/

??? require("file.php"); /*正しいステートメント*/

???? は元々 php3.0 にありましたrequire() に含まれるファイルは return ステートメントを使用できますが、条件としては return ステートメント{} には含めることはできません。これは内部的なものであり、インクルードされるファイルのグローバル スコープに含める必要があります。 php4.0require() でキャンセルされました の関数は、include() を使用して実現できます。

?

2.include()ステートメント

???? include() ステートメントと require() ステートメントには多くの類似点があります。 require() の一部を除き、include() に適用できないことが明示的に示されていません >require() ステートメントの関数は、include() ステートメントに完全に適用できます。以下では、require() ステートメントでは使用できない、include() ステートメントの関数と特徴を紹介します。

???? include ステートメントは、実行時にインクルードされるファイルのみを読み取ります。エラー処理を容易にするには、include ステートメントを使用します。include エラーが発生した場合、プログラムは include をスキップします。 > ステートメントを実行すると、エラー メッセージが表示されますが、プログラムは実行を続行します。

???? php プロセッサは、include() ステートメントに遭遇するたびに再処理するため、include() を条件制御ステートメントとループ ステートメントに含めて、別のファイルをインクルードします。

???? 例:

???

????????? $files=array('first.php','second.php','third.php');

????????? for($i=0;$i

????????? {

???????????? $files[$i] を含める;

????????? }

??? ?>

???? include( ) ステートメントは、return ステートメントを使用して値を返し、実行を停止できます。インクルードされたファイルの下のコンテンツ。ただし、php3.0php4.0 では、そのような状況の処理が異なります。 php3.0 では、return ステートメントを {} に含めることはできません。 , 関数内にある場合を除き、その場合はファイルの戻り値ではなく関数の戻り値を表します。 php4.0 では、ユーザーは関数の戻り値と同様に、ファイル内で数値を返すこともできます。このようなステートメントは にあります。 ? エラーは通常、

php3.0

で報告されます。以下は例です:

???? インクルードされるファイルが test.inc で、メイン ファイル main.php であると仮定します。ディレクトリ内の にあります。 test.inc の内容は次のとおりです:

株式会社テスト

??? echo "戻る前に";

??? if(1)

???{

????????? 27 を返す

???}

??? echo "帰国後
n";

?>

?

次のステートメントが main.php ファイルに含まれているとします。

??? $retval=include('test.inc');

??? echo "返されたファイル:'$retval'
n";

?>

???? php3.0 インタプリタは 2 行目でエラーを報告し、include() ステートメントの戻り値を取得できません。しかし、php4.0 では、次の結果が得られます:

??? 帰国前

??? 返されたファイル: '27'

??? 以下では、main.php< に変更されたとします。 🎜>

??? include('test.inc');

??? echo "main.html に戻る
n";

?>

??? php4.0 の出力結果は :

??? 帰国前

??? main.html に戻る

???

?? php5.0 の出力結果も :

??? 帰国前

??? main.html に戻る

?

??? php3.0 の出力結果は :

??? 帰国前

??? 27main.html に戻る

?

??? 解析エラー:/apache/htdocs/phptest/main.html の 5 行目で解析エラーが発生しました

???

??? 上記のエラーは、return ステートメントが にあるために発生します。 {} は内部であり、関数内ではありません。 {}test.inc の最外層に配置されるように削除された場合、出力結果は次のようになります:

??? 帰国前

??? 27main.html に戻る

???27 が表示される理由は、 にあるためです。 include() return は php3.0 ではサポートされていません。

?

3.require_once() および include_once() ステートメント

??? require_once() および include_once() ステートメントは、require() および <🎜 に対応します。それぞれ >include() ステートメント。 require_once() および include_once() ステートメントは主に、複数のファイルを保存する必要がある場合に使用されます。これにより、同じコード部分を含めることによって発生する関数または変数の繰り返し定義のエラーを効果的に回避できます。 例: 2 つのファイル util.incfool.inc を作成した場合、プログラムコード:

?? util.inc:

???

?????? define(PHPVERSION,floor(phpversion()));

?????? エコー「グローバルは素晴らしいです
n」;

?????? 関数 GoodTea()

?????? {

???????????? return "烏龍茶おいしいです!";

?????? }

?? ?>

??? および fool.inc:

??

?????? require ("util.inc");

?????? 関数 showVar($var)

?????? {

???????????? if(PHPVERSION==4)

???????????? {

????????????print_r($var);

???????????? }

???????????? その他

???????????? {

????????????var_dump($var);

???????????? }

?????? }

?? ?>

??? 次に、これら 2 つのファイルを error_require.php に含めます:

???

????????? require("fool.inc");

????????? require("util.inc");//この文はエラーを生成します

????????? $foo=array("1",array("complex","quaternion"));

????????? echo "これは util.inc を再度必要とします。 また
n";

????????? echo "fool.incn で必要";

????????? echo "goodTea を実行しています:".goodTea()."
n";

????????? echo "foo を印刷中:
n";

????????? showVar($foo);

??? ?>

???? error_require.php を実行すると、出力は次のようになります。 🎜 >

???? グローバルは素敵です

???? グローバルは素敵です

?

??? 致命的なエラー: util.inc の 4 行目で GoodTea() を再宣言できません

????

??? require_once() ステートメントを使用する場合🎜> require() ステートメント では上記のエラーは発生しません。 require()error_require.phpfool.inc に配置します。ステートメントは require_once() ステートメントに変更され、名前も error_require_once.php, に変更されます。結果は次のように表示されます。

??? グローバルは素敵です

??? これはまた util.inc を必要としますが、これも です

??? fool.inc で必須ですRunning GoodTea:烏龍茶が美味しいです!

??? foo を印刷中:

??? 配列([0] => 1 [1] => 配列 ([0] => 複素数 [1] = クォータニオン))

???

?? ?include_once() ステートメントの構文と include() ステートメントは似ていますが、主な違いは、ファイルを複数回インクルードすることによって生じる関数または変数の定義の繰り返しを避けることです。

?

?? ?require_once ステートメントには参照チェーンがあり、ファイルをプログラムに一度だけ追加すると、変数値と関数名の競合が回避されます。

??

??? は、require_once ステートメント、 と同じです。 include_once ステートメントは、include の機能を拡張します。プログラムの実行中に、指定されたファイルがインクルードされます。そのファイルから参照されるプログラムが以前にインクルードされている場合、include_once() はそれを再度インクルードしません。つまり、同じファイルは 1 回しか参照できません。

?

???include_once() ステートメントには、スクリプトの実行中に指定されたファイルが含まれ、実行されます。この動作は include() ステートメントに似ていますが、唯一の違いは、ファイル内のコードが既にインクルードされている場合、再度インクルードされないことです。このステートメントの名前が示すように、このステートメントは 1 回だけ含まれます。

?

include_once() は、スクリプトの実行中に同じファイルが複数回インクルードされる可能性があり、関数の再定義を避けるためにファイルが 1 回だけインクルードされるようにしたい場合に使用する必要があります。 、変数の再割り当ておよびその他の問題。

?

require_once() および include_once() > PHP PEAR コード。 ?

は、

include() と同じ値を返します。ファイルが含まれている場合、この関数は TRUE を返します。 ?

: include_once() は、 PHP 4.0.1pl2 で新しく追加されました。 ?

: include_once() および require_once( ) 大文字と小文字を区別しないオペレーティング システム (例: Windows) での動作 ?

は期待どおりではない可能性があります。

例:

? include_once() では、 Windows は区別されません。大文字と小文字 ?

include_once("a.php"); // これ .php

が含まれます include_once("A.php"); // これ Windows では a.php が再び含まれます (PHP 4 のみ)

?>

?

?

この動作は

PHP 5 で変更されました。最初にパスが正規化されるため、 C:PROGRA~1A.php C:Program Filesa.php と同じ実装を持ち、ファイルは 1 回だけインクルードされます。 ?

???

インクルードするファイルが存在しない場合、インクルードプロンプトnotice を確認し、次のステートメントの実行を続行します。require は致命的なエラーを表示して終了します。 ?

win32プラットフォームでは、これらは最初にインクルードされてから実行されるため、include または require ステートメントは、ディレクトリの混乱を引き起こします。 Linux では状況が異なる可能性がありますが、まだテストしていません。 ?

ファイルを複数回インクルードしたくない場合は、

include_once

または require_once## で読み込み、文書データの書き込みが可能です。

関数 r($file_name) {

$filenum=@fopen($file_name,"r");

@flock($filenum,LOCK_SH);

$file_data=@fread($filenum,filesize($file_name));

@fclose($filenum);

return $file_data;

}

関数 w($file_name,$data,$method="w"){

$filenum=@fopen($file_name,$method);

flock($filenum,LOCK_EX);

$file_data=fwrite($filenum,$data);

fclose($filenum);

return $file_data;

}

?>

?

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。