2015年11月1日

PHP requireとrequire_onceの違い

«
»

Pocket

前回は「外部ファイルに記述した関数を利用する」方法を
requireという外部ファイルを呼び出す命令で紹介しました。
 
実は、外部ファイルを呼び出すという命令にはrequire以外にもいくつか
別の命令が存在します。
php require require_once include include_once 

requireとrequire_onceの違い

まず、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;

?>

main_file1.phpの実行結果

 
php require_once

解説

上のプログラムでは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>";
?>

main_file2.phpの実行結果

php require require_once 違い

解説

少し長いプログラムですが、基本的には外部ファイルを呼び出して、変数を表示
しているだけのプログラムです。
最初の出力では、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では、既にファイルが読み込まれている場合、読み込まない、
といういう意味が少しわかって頂けるかと思います。

まとめ

・require以外にも外部ファイルを読み込む方法がある
・require_onceは同じファイル名の場合、1度だけ読み込む
・基本的にはrequire_onceを使う

【関連する記事】