【PHP】requireとincludeの違い

PHPの「require」と「include」等の読み込み構文の違いについての覚書です。

PHPにおいて、ファイルを読み込む言語構造には、次の4つがあります。

・ require
・ require_once
・ include
・ include_once

上記の4つは、似た動作をしますが、微妙に挙動が異なります。
結論から言うと、ベターなのは、「require_once」です。

以下、それぞれ検討していきます。

まず、これらの言語構造は、2つの観点から区別できます。
一つ目は、エラー処理の仕方。
二つ目は、ファイルの再読込の可否。

■ エラー処理の仕方について

require系の二つと、include系の二つは、エラー処理の仕方が異なります。
例えば、存在しないファイルを指定したとき、次のエラーとなります。

・ require系・・・fatal error (実行が止まる)

・ include系・・・warning error (実行は継続される)

fatal error は、エラー時点で実行が止まります。これに対して、warning error では、実行が続いてしまいます。

基本的には、エラーが生じた時点で処理を止めることが、バグの発生を防止します。
ですから、この観点からいうと、require系の方がファイルの読み込みに適していると言えます。

■ ファイルの再読込の可否

上記4つの構文には、_onceが付くものがあります。付かないものとの違いは、特定のファイルを二度以上読み込めるかということです。

_onceが付いている構文の場合、同じファイルを二度以上読み込んでも、実際には最初の一度だけ読み込むことができます。

これに対して、onceが付かない構文の場合には、同じファイルの複数回の読み込みが可能となります。もっとも、同じ関数やクラスを二度以上読み込むと再定義できない旨のfatal errorとなります。

通常、ファイルの読み込みは一度だけ行えば足りるので、once系の構文が使われる傾向にあります。

■ 結論

結果として、requre_once 構文がベターということになります。

■ まとめ

・ require ・・・・・・・・・ fatal error、複数読込可能(但し、fatal error)
・ require_once ・・・ fatal error、複数読込無視
・ include ・・・ ・・・・・・warning error、複数読込可能(但し、fatal error)
・ include_once ・・・ warning error、複数読込無視

以上です。

カテゴリー: PHP パーマリンク

コメントを残す

メールアドレスが公開されることはありません。