まえがき、インクルードとは?
PHPにはインクルードという便利な処理があります。
各htmlページに同じ処理を何度も書く手間を省いて、共通事項になっている処理を別所から参照できる機能でもあるし1つのページの複雑化/長文化を避ける為に別所にソースコードを仕分ける機能とも言えます。
特に大きくなってしまったウェブページ/サイトを修正する手間を効率化してくれるものと言えるでしょう。
しかし、このPHPのインクルード処理は4種類もの処理があります。そしてそれらは微妙に使い方が違ってきますのでそれを解説したいと思います。
読み込みエラーがある場合で、その後のデータを処理する/しない。
そして、1度だけ読み込む/何度でも読み込む
の、違いで4種類に分かれています。
「include」…読み込みに失敗しても処理継続するインクルード
例えば、includeを使って、「text.php」を開こうとした際に、「text.php」が無いと言う時、そのIncludeはエラーと処理して、その後の処理を読み込んでいきます。
下記の例だと、
<? include('./text.php'); ?>
<p>エラー後読み込みテスト</p>
という処理で、
Warning: include(test.php): failed to open stream: No such file or directory in C:\xampp\htdocs\index.php on line 11
Warning: include(): Failed opening 'test.php' for inclusion (include_path='C:\xampp\php\PEAR') in C:\xampp\htdocs\index.php on line 11
エラー後読み込みテスト
と出ます。最後の「エラー後読み込みテスト」の部分がちゃんと読み込まれている所がミソです。
エラーがあってもとりあえず処理を継続させたい時に使います。
「require」…読み込みに失敗したらそれ以上の処理をしないインクルード
requireを使って、「text.php」を開こうとした際に、「text.php」が無いと言う時、エラーと処理してしまいます。
下記の例だと、
<? require('./text.php'); ?>
<p>エラー後読み込みテスト</p>
という処理で、
Warning: require(test.php): failed to open stream: No such file or directory in C:\xampp\htdocs\index.php on line 11
Fatal error: require(): Failed opening required 'test.php' (include_path='C:\xampp\php\PEAR') in C:\xampp\htdocs\index.php on line 11
と出ます。
「
エラー後読み込みテスト
」読み込まれていませんね。確実にエラーに気づきたい、もしくは予期せぬ動きが出たときに容赦なくエラー処理にしたいならこちらを使います。
1度だけ処理する「include_once()」「require_once()」
最後に紹介するのは、同じスクリプトの中で、1度限り処理するinclude/requireの、「include_once()」「require_once()」です。
実は、includeもrequireも、2回記述がある場合、2回読み込んでくれます。何度でも読み込んでくれるのです。
しかし、そういう処理をさせたくはないという時は、この「include_once()」「require_once()」を使うと、1回限りの利用に抑えてくれます。
関数の定義などを行う場合、この「require_once()」が便利です。関数定義は1度しか読み込まない前提ですから、万が一の定義上書きを避ける事ができます。
まとめ
「include()」…読み込みに失敗してもとりあえず処理継続。
「include_once()」…読み込みに失敗してもとりあえず処理継続。1度しか読み込まない。
「require()」…読み込みに失敗したらエラー扱い。
「require_once()」…読み込みに失敗したらエラー扱い。1度しか読み込まない。