MVCモデルを使用したPHPのプロジェクトにおける、オートロード機能の説明と、具体例を記します。
オートロード機能とは
クラスファイルの読み込みを自動化する機能のこと。
クラスを作成する場合、再利用する性質上、1クラスを1ファイルで管理するのが基本。
しかし扱うファイル数が増えた時に、各ファイルの先頭で一つ一つrequireする必要が出てくる。
そこで、オートロードを使用することで、クラスを使用する際に、クラスファイルを明示的にrequireする必要がなくなる。
※ライブラリ管理ツールである「composer」を使う方法もある。
具体例
spl_autoload_register(function($class) {
$prefix = 'Bbs\\';
if (strpos($class, $prefix) === 0) {
$className = substr($class, strlen($prefix));
$classFilePath = __DIR__ . '/../lib/' . str_replace('\\', '/', $className) . '.php';
if (file_exists($classFilePath)) {
require $classFilePath;
}
}
});
spl_autoload_register()
「spl_autoload_register()」関数はPHPの組み込み関数で、機能としては、自動読み込み関数(オートロード関数)を登録する。
spl_autoload_register()関数を使用して、引数として渡されたコールバック関数を自動読み込み関数として登録することを行う。
オートロード関数とは、クラス名から、対応するファイルを探し出し、requireする関数。
このコードでのオートロード関数は、指定された名前空間(Bbs\\)のクラスを読み込むための処理を定義している。
クラス名を元にクラスファイルのパスを組み立て、そのパスが存在する場合はクラスファイルを読み込むという処理が行われる。
具体的には、クラス名にBbs\が含まれている場合、lib/ディレクトリに対応するファイルがあるかを探す。libフォルダ内にあるファイル名とクラス名が同じであれば、そのファイルをrequireする。 これがこのコードのオートロード関数の役割である。
strpos()
strpos() 関数は、文字列内で指定した文字列が最初に現れる位置を返す関数。第1引数に検索対象の文字列を、第2引数に検索する文字列を指定する。
この例の場合、 $
class という文字列内で $
prefix という文字列が最初に現れる位置が0であるかどうかを判定している。 === 演算子は、比較する値と型が等しい場合に true を返すため、 strpos($
class, $
prefix) === 0 は、 $
prefix が $
class の先頭にあるかどうかを判定している。
つまり、 $
class が Bbs\\ から始まる場合に true を返し、それ以外の場合に false を返す。
補足・このコードで使われている組み込み関数
● spl_autoload_register():
オブジェクトを使う前に定義されていないクラスが出現した場合、自動的にクラスをロードするためのオートローダー関数を登録する。
● strpos():
文字列内で部分文字列を検索し、最初に現れる場所のインデックスを返す。見つからなかった場合は false を返す。
● substr():
文字列の一部分を取り出す。
●strlen():
文字列の長さを返す。
● str_replace():
文字列内の指定されたテキストを置換する。
● file_exists():
ファイルが存在するかどうかを確認する。
● require():
指定したファイルを読み込む。読み込みが失敗した場合、エラーを発生させる。