大規模開発では扱うファイルが増えるため、必要なクラスの読み込みが煩雑になるケースが多いです。
従来のPHPのファイルのロード
以前のPHPではファイルを読み込むときにrequireやincludeなどでファイルを読み込むことが一般的でした。
これらの方法ですと、大規模な開発になった時に、下記のようなデメリットが発生します。
- 不要なファイルまで読み込んでしまう
- 読み込むファイルが膨大になると読み込みのメソッドをたくさん書かねばならず大変(require_onceだらけになります。)
ここら辺JavaだとIDEが自動生成してくれるのですが、PHPの場合、そうもいかず1つ1つ地道に書いていかないといけません。
オートローディングとは
オートローディングとはクラスが必要になったときに、自動でファイルを読み込む仕組みのことです。クラスに属していない関数や定数はオートローディングすることができません。
オートローディングを利用すると、下記のときにはじめて対象のクラスの読み込みを開始します。
- インスタンスを生成するとき
- クラスの定数や静的メソッドを使用するとき
オートローディングを使用すると読み込みの処理をいちいち書かなくていいため、コードが大変すっきりします。
最近のPHPのライブラリはComposerで管理しているものが多いですが、オートローディングを使用してライブラリの読み込みを行っています。
サンプルソース
実際にオートローディングを使う場合は、spl_autoload_registerというメソッドを使います。
最小構成でかくと下記のようになります。
まず、オートローダーの処理自体を書くクラス(例:require_class.php)
1 2 3 4 5 6 7 8 9 |
//クラスを格納しておくディレクトリを定義 define('CLASS_DIR' ,"クラスのディレクトリ"); /** クラスファイルを読み込む **/ function autoload_classes( $class ) { include CLASS_DIR . $class . '.php'; } spl_autoload_register('autoload_classes'); |
次にオートローダーの処理を書いたクラスを読み込むファイル(例index.php)
1 2 3 |
<?php require_once( dirname(__FILE__).'/require_class.php' ); |
になります。上記は必要最小限のソースですので、もう少し正しいサンプルを見たい方は下記を参考に。
http://qiita.com/misogi@github/items/8d02f2eac9a91b4e6215
PHPのオートロード
PHPでクラスをspl_autoload_registerを使ってオートロードする
メモ
- 継承関係がある場合は、親も自動的に読み込んでくれます。
- 実際にはクラス名(現在は名前空間があるものが多いはず)からファイルパスをパースする処理(マッピングする必要あり?)が必要です。
- 読み込むメソッド(上記だとautoload_classes)がオブジェクト内のメソッドだったときはspl_autoload_register(array(‘クラス名’,’メソッド名’))になります。
[…] ※useは対象のクラスに名前空間を付ける処理ですがrequireではないので合わせてrequireをするようにしましょう。一般的にはautoloaderを使う方法がメジャーです。autoloaderについてはこちら […]