require_once()命令は、C言語のプリプロセッサ
#includeの動作と全く同様にこの部分を指定したファ
イルで置換し、この面では、require()命令に似てい
ます。主な違いは、読み込みの連鎖です。
require_once()を使用した場合、そのコードがスク
リプトに読み込まれるのが一回だけであることが保証され、変数の値また
は定義した関数の名前が壊されるのを回避します。
例えば、utils.incと
foolib.incという2つのファイルを作成するとしましょ
う。
例 11-2utils.inc
<?php
define("PHPVERSION", floor(phpversion()));
echo "GLOBALS ARE NICE\n";
function goodTea() {
return "Oolong tea tastes good!";
}
?>
|
|
例 11-3foolib.inc
<?php
require ("utils.inc");
function showVar($var) {
if (PHPVERSION == 4) {
print_r($var);
} else {
var_dump($var);
}
}
// 他の関数の定義 ...
?>
|
|
そして、この後、スクリプト
cause_error_require.phpを書いて下さい。
例 11-4cause_error_require.php
<?php
require("foolib.inc");
/* 以下の処理は、エラーを発生します。 */
require("utils.inc");
$foo = array("1",array("complex","quaternion"));
echo "this is requiring utils.inc again which is also\n";
echo "required in foolib.inc\n";
echo "Running goodTea: ".goodTea()."\n";
echo "Printing foo: \n";
showVar($foo);
?>
|
|
後の例を実行した場合、( PHP 4.01pl2を用いた)結果の出力は次のように
なります。
foolib.incおよび
cause_errror_require.phpを
require()の代わりに
require_once()を使用するように修正し、
後の例のファイル名を
avoid_error_require_once.phpに変更すると
次のようになります。
例 11-5foolib.inc (fixed)
...
require_once("utils.inc");
function showVar($var) {
...
|
|
例 11-6avoid_error_require_once.php
...
require_once("foolib.inc");
require_once("utils.inc");
$foo = array("1",array("complex","quaternion"));
...
|
|
これを実行すると、(PHP 4.0.1pl2を用いた)出力は次のようになります。
また、Cプリプロセッサの動作との類似にも注意して下さい。この命令は、
"コンパイル時"、つまり、スクリプトがパースされた後で実行される前に
実行され、実行時に動的に挿入される必要があるスクリプトの部分に使用
するべきではありません。このような場合は、
include_once()または
include()を使用して下さい。
require_once()および
include_once()の他の例については、最新のPHPソー
スコード配布ファイルに含まれるPEARのコードを参照下さい。
require()、include()、
include_once()、
get_required_files()、
get_included_files()、
readfile()、virtual()も参照
下さい。