2009-09-03 3 views
2

パスの定数を定義するファイルinit.phpが含まれています。私は...別のファイル(レイアウト/ header.phpの)にそのファイル(index.phpを)に init.php を含めるとあれば init.php は、これらのファイルに追加される前に解析されていますかそれは親ファイルに追加され、親ファイルは全体として解析されますか? init.phpは、解析される場所の相対的なパス変数を定義しているため、これが重要なのはなぜですか。PHPの解析対象インクルード

答えて

3

実際includerequireは警告を発行しますE_ERRORincludeながらで失敗しますrequireを除くすべてで同一です。また、両方のステートメントは、スクリプト内で実際に実行されたときにのみアクティブ化されます。だから、次のコードは、常に動作します:

<?php 
echo "Hello world"; 
if (0) require "non_existing.php"; 

あなたの質問への答えはindex.phpが最初に解析されて実行されることです。そして、include "init.php"ファイルが出現すると、init.phpが解析され、現在のスコープ内で実行されます。 layout/header.phpと同じ - 最初に解析されます。

としては、すでにinit.phpが解析され、include/requireが呼び出されるたびに実行されます注意し、あなたはおそらくinclude_onceまたはrequire_onceを使用したいと思うでしょうそう。

3

ファイルが含まれている位置にコピー貼り付けされていると考えてください。あなたのものが再定義されないようにするには、require_onceまたはinclude_onceを使用してください。


.phpまたは.txt含めての間に違いはありません。 PHPを.txtファイルに含めることができます。開いているタグが<?phpである限り、解析されます。

0

includeまたはrequireを使用するかどうかによって異なります。 includeを指定すると、インクルードされたファイルのテキストコンテンツが親に追加され、すべてが解析されます。 requireを使用すると、インクルードされたファイルが最初に解析され、その内容がランタイムで使用可能になり、その後、処理はインクルードファイルの残りの部分を解析することによって継続されます。

要求の実行時にinitファイルが1回だけロードされるようにしたい場合は、require_onceを使用して、呼び出した回数に関係なく1回だけ解析されるようにします。その定数を必要とするどこでもあなたのinitファイルを読み込もうとするのは良い考えですが、もっと多くの時間を必要に応じて解析しないようにするにはrequire_onceを使ってください。

+1

pingw33が正しい - 'require 'と' include'は失敗の重大度だけに遅延します。 – Guss

+0

また、テキストを含めることなく、すべてのPHPファイルがそのまま解析されます。 – pingw33n