でじくる。

主にプログラムの話題などを扱うブログです。

PHPのautoloadは結局どう書くのが一番気分がいいのか

PHPにはクラスを自動的に探してくる

オートローディングという機能があります。

 

オートロードするための関数を登録する方法として

__autoload()とspl_autoload_register()の二つが存在し、

__autoload()は複数の関数を登録できないので非推奨、

spl_autoload_register()を使いましょう、ということになっています。

サードパーティのライブラリなんかを使用する場合、

__autoload()だと困ったことになるわけですね。

 

で、オートロードの関数を作成するわけですが、

クラスの存在するかもしれないファイルのパスを指定する方法は

だいたい三通りあります。

1.クラスをおいてあるディレクトリを逐一指定してパスを作成する

2.クラスの命名規則からパスを作成する

3.名前空間の命名規則からパスを作成する

 

1は簡単ですね、/path/to/hogeとかディレクトリを書いておいて、

そこから/path/to/hoge/AClass.phpみたいなパスを作成する。

2はPath_To_Hoge_AClassみたいなクラス名をつけるようにして

そのクラス名を分解して/path/to/hoge/AClass.phpにする。

3はPHP5.3以降の新機能名前空間を使用する方法。

オートロードの関数には補完された名前空間が渡されるので

path\to\hoge\AClass.phpみたいな名前空間からパスを作成する、と。

 

PHP5.3以前は1か2の方法が使用されていて、pearでは2の方法が推奨というか、

命名規約に書かれています。

http://pear.php.net/manual/ja/standards.naming.php

 

ただ、私は2の方式の長ったらしいクラス名が嫌いだったので、

めんどくさいと思いつつ1の方法を使用していました。

 

PHP5.3以降は名前空間が使えるので3の方法にすればいいんじゃね?

という話になるわけですが、補完なしにuse Foo\Barとか打つのはマゾいので

もろもろ検討中です。