【2019年07月22日】

今度はrequireとrequire_onceの違い。

requireは、既に読み込まれているかどうかなど関係なく、問答無用で読み込もうとするのに対し、require_onceは、既に同じファイルが読み込まれている場合は何もしない

例えばクラス定義されたファイルを二度requireしようとすると、duplicateなんたらっていう重複定義エラーみたいな感じのエラーが発生する。
しかしrequire_onceの場合は、既に読み込まれているファイルは読み込みを行わないので、エラーにはならない。

クラスの場合、例えばAというクラスを継承したBというクラスと、同じくAというクラスを継承したCというクラスが存在した場合、Bクラスの定義の直前にAクラスを読み込んでおく必要があります。Cの場合も同じです。
で、ある処理でBとCのクラスの両方を使う必要がある場合、BとCの両方を読み込みますが、それぞれでAを読み込んでいるため、requireだと重複定義エラーになります。

特にオブジェクト指向の場合、そういうことは十分ありえるので、基本的にはrequire_onceを使用するようにする。
ちなみにincludeとinclude_onceも同じ関係。