include_onceとrequire_onceの違いを明確に把握しておらず、今更ですが、違いを調べてみました。
下の公式サイトに記載されているとおり、大きな違いは、エラー時の動作が異なります。
公式サイト
http://jp2.php.net/manual/ja/function.include.php
具体的には、include_onceは、対象ファイルが見つからない場合に、「Warning」を発行し以降の処理を続行します。
この対象ファイルを検索する範囲は、呼出元のスクリプトのディレクトリと、現在の作業ディレクトリになります。
一方の、require_onceは、対象ファイルが見つからない場合に、「fatal_error」を発行し以降の処理を中断します。
そのため、対象ファイルが取込めないことで、重大なエラーとなる処理の場合には、require_onceを使用することが推奨されています。
サンプルプログラム
エラーが発生しないパターン
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
file-a.php <?php // 共通変数を定義 $commom_message = "メッセージを設定しました!"; ?> test-include.php <?php include_once './file-a.php'; echo $commom_message . PHP_EOL; echo "処理が終わりました!"; ?> 実行結果 php ./test_include.php <p>取込まれました!</p> メッセージを設定しました! 処理が終わりました! * test-require.php * <?php require_once './file_a.php'; echo $commom_message . PHP_EOL; echo "処理が終わりました!"; ?> 実行結果 php ./test_require.php <p>取込まれました!</p> メッセージを設定しました! 処理が終わりました! |
エラーが発生するパターン
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
file-a.php <?php // 共通変数を定義 $commom_message = "メッセージを設定しました!"; ?> test-include.php <?php include_once './file-none.php'; echo $commom_message . PHP_EOL; echo "処理が終わりました!"; ?> 実行結果 php ./test_include.php Warning: main(./file_ab.php): failed to open stream: No such file or directory in /home/xxx/test_include.php on line 2 Warning: main(): Failed opening './file_ab.php' for inclusion (include_path='.:/usr/local/php4/lib/php:/usr/share/pear') in /home/xxx/test_include.php on line 2 Notice: Undefined variable: commom_message in /home/xxx/test_include.php on line 6 処理が終わりました! test-require.php <?php require_once './file_none.php'; echo $commom_message . PHP_EOL; echo "処理が終わりました!"; ?> 実行結果 php ./test_require.php Warning: main(./file_ab.php): failed to open stream: No such file or directory in /home/xxx/test_require.php on line 2 Fatal error: main(): Failed opening required './file_ab.php' (include_path='.:/usr/local/php4/lib/php:/usr/share/pear') in /home/xxx/test_require.php on line 2 |
上記の実行結果からわかるように、
include_onceは、対象ファイルが見つからない場合でも、以降の処理を実行しています。
一方のrequire_onceは、以降の処理を中断します。
この理由から、重要な共通ファイルなど見つからない場合に、処理を中断したい場合は、
require_onceを利用することが推奨されています。
詳細については、プログラミング学習サイトに記載中です!