[PHP-users 11490] Re: include_onceについて

Youichi Iwakiri php-users@php.gr.jp
Thu, 14 Nov 2002 13:56:18 +0900


いわきりです

S.Okazaki wrote in <20021114132435.D220.OKAZAKI@jp-hb.com> :
>今まで私は、include()しか使ったことがありません。
>と言うのも、
>include("hoge.inc");
>include("hoge.inc");
>のように、同じファイルを2度読み込むような場面に出くわしたことがない
>からです。
>ゆえに、include_onceを使用せずとも困ったことがないわけです。
>では具体的にどう言った場合に、同じファイルを2度読み込むような事が
>あるのでしょうか?
>もしそう言う場面に出くわせば、include_once()の必要性がもっと理解できる

汎用的なライブラリを作成していくと、2度読みの恐れが発生してきます。

basic.inc -- 基本的な低レベル文字列処理関数

OOstr.inc -- オブジェクト化した文字列処理関数
             (basic.incで提供される関数郡をクラス化し、利便性をあげたもの)
              内部でbasic.incをinclude

OOstr.incがbasic.incを内包していることを忘れて何らかのアプリケーションを
作成する場合等に、basic.incもincludeしてしまい関数の二重定義となってしまう
様なことが起こります。
各関数定義ファイル(*.inc)の依存関係を掌握出来ないほど大規模なコードを
記述する場合に効果を発揮すると思うのですが、include_once()を使わずとも
問題なしのコードを書くことは出来ます。

先程の例では、関数/クラス定義を使いませんでしたが、include, requireで読み込まれる
スクリプトは、評価される(実行される)ので、初期化コードを埋め込んで置くと
意図しないところでglobal変数が初期化されて期待する結果が得られない等の
問題もあります。
#そういうコードを書かない事が一番良いのですが :)

-- 
Youichi Iwakiri