前回は「外部ファイルに記述した関数を利用する」方法を
requireという外部ファイルを呼び出す命令で紹介しました。
実は、外部ファイルを呼び出すという命令にはrequire以外にもいくつか
別の命令が存在します。
まず、requireとrequire_onceの違いですが、
onceと名のつく通り、require_onceはファイルを1度だけ読み込みます。
つまり、同じプログラムの中に2回、同じ外部ファイルへのrequire_once
を書いても、2回目は読み込まれない、ということです。
ちょっと意味がわかりませんよね。。。サンプルプログラムをみてみましょう。
まず、こんな外部ファイル(sample_file1.php)を作ります。
<?php $a = 2; $b = 1; ?>
次に、このファイルを呼び出すファイル(main_file1.php)を作ります。
<?php require_once "sample_file1.php"; echo $a; //sample_file1.phpで定義された変数が表示されます echo "<br>"; echo $b; ?>
上のプログラムではrequire_onceを使いました。
前回紹介したような関数の呼び出しではなく、外部ファイルに定義されている変数を
利用することも可能です。
つまり、main_file1.phpでは変数の定義をしていなくても、
sample_file1.phpで定義しているため、利用することができています。
長くなりましたがここまでが前提です。
ここからrequireとreqire_onceの違いを具体的に見せたいと思います。
main_file1.phpを変更して、main_file2.phpを作ります。
<?php require "sample_file1.php"; require_once "sample_file1.php"; echo $a; echo "<br>"; echo $b; echo "<br>"; $a = 50; $b = 30; echo $a; echo "<br>"; echo $b; echo "<br>"; require "sample_file1.php"; echo $a; //変数の値が2に戻る echo "<br>"; echo $b; echo "<br>"; $a = 50; $b = 30; require_once "sample_file1.php"; echo $a; //変数の値が50のまま echo "<br>"; echo $b; echo "<br>"; ?>
少し長いプログラムですが、基本的には外部ファイルを呼び出して、変数を表示
しているだけのプログラムです。
最初の出力では、sample_file1.phpで定義されているa=2,b=1が表示されました。
次に、main_file2.phpでa=50,b=30に上書きしました。
すると、当然ですが、50と30が表示されます。
そしてまた、ここでrequireを実行して、変数を表示してみます。
すると、a=2,b=1に戻っていることがわかります。
そしてまた、a=50,b=30に上書きしました。そこでさらに、require_onceを
再度実行しています。するとa=50,b=30のままでした。
既にそのファイルは読み込まれているからです。
require_onceでは、既にファイルが読み込まれている場合、読み込まない、
といういう意味が少しわかって頂けるかと思います。