PHP5以上では、いわゆる「遅延読込」を可能にする自動読込の機能が用意されている。
<?php function __autoload($class){ require_once(str_replace('_', '/', $class)); } $obj = new Some_Class(); ?>
■Standard PHP Library(SPL)による自動読み込み
__autoload関数は単一のディレクトリ構成ルールの元でコーディングする際には非常に役立つが、異なったライブラリを使うなどした場合に、非常に重く遅くなる。従って、以下のように記述する。
<?php spl_autoload_register('spl_autoload'); if(function_exists('__autoload')){ spl_autoload_register('__autoload'); } ?>
もしもユーザーが定義した__autoload関数がある場合は、条件分岐し登録してあげる必要がある。
spl_autoload関数
全てのインクルードパスから、クラス名を小文字にし「.php」や「.ini」を付加し検索する。付加する拡張子を加えたい場合は、spl_autoload_extensions関数を使用する。
spl_autoload_register
指定した関数を__autoloadのデフォルトの実装とする。
個人的には、プログラムの最初にインクルードファイルを明記するやり方が好きなのでイマイチ使ったことがないが、大規模なアプリケーションでの有用性は垣間見える。