2

PHP 内で include または require 言語構造を使用するページがいくつかあります。これらの多くは、IF、ELSE ステートメント内にあります。

必要なファイルが見つからない場合、ページがまったく読み込まれないことは認識していますが、この方法を含める主な目的は次のとおりです。

1) ページ上のコードの混乱を減らす

2) ステートメントが満たされない限り、ファイルをロードしません。

include または require ステートメントを発行すると、関係なくファイルがロードされます (したがって、if/else ステートメント内に配置することで達成しようとしていた利点がなくなりますか?

簡単な例:

<?php


$i = 1

if($i ==1) {

      require_once('somefile.php');

} else {

     require_once('otherfile.php');
}

?>

ページの読み込み時に、両方のファイルがチェックされて読み込まれますか?

4

4 に答える 4

8

include/requireステートメントをif (or else)の本体に配置すると、ifの条件が true の場合に実行されます。

if ($a == 10) {
    // your_first_file.php will only be loaded if $a == 10
    require 'your_first_file.php';
} else {
    // your_second_file.php will only be loaded if $a != 10
    require 'your_second_file.php';
}


そして、必要に応じて、これを非常に簡単にテストできます。
この最初の例:

if (true) {
    require 'file_that_doesnt_exist';
}

あなたを取得します:

Warning: require(file_that_doesnt_exist) [function.require]: failed to open stream: No such file or directory
Fatal error: require() [function.require]: Failed opening required 'file_that_doesnt_exist'

つまり、require実行され、ファイルが存在しないため失敗します。


この2番目の例は次のとおりです。

if (false) {
    require 'file_that_doesnt_exist';
}

エラーrequireは発生しません。実行されません。

于 2011-03-12T22:35:32.843 に答える
4

ページの読み込み時に、両方のファイルがチェックされて読み込まれますか?

いいえ、少なくとも (IIRC) PHP 4.0.1 以降ではありません。

インクルードの乱雑さを減らしたい場合で、主にオブジェクト指向のコードを使用している場合は、PHP のautoloadingも参照してください。

于 2011-03-12T22:35:31.247 に答える
2

いいえ、それらのファイルの 1 つだけがロードされます。

于 2011-03-12T22:35:21.940 に答える
2

includeandコンストラクトは、require渡されたときにのみ評価されます。ファイルは、式が一致した場合にのみ読み取られます。

コンストラクトに変数が含まれている可能性があることを考慮すると、説明は簡単です。

require_once("otherfile-{$i}.php");

それはサポートされています。$iしかし、適切なファイルをロードするには、PHP の状態を知る必要があるため、PHP がその特定の行を実行する前に動作する可能性はありません。

于 2011-03-12T22:38:40.253 に答える