差分
この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
programming:php:autoload:start [2011/08/24 10:07] 127.0.0.1 外部編集 |
— (現在) | ||
---|---|---|---|
ライン 1: | ライン 1: | ||
- | ====== __autoload ====== | ||
- | * PHPでクラス実装をし始めたら、require_onceを多用することになった。 | ||
- | - require_onceは遅い。 | ||
- | * http://blog.apecell.com/2007/10/22/id/19 | ||
- | * index.phpにrequire_onceがひたすら並ぶ。 | ||
- | * 途中でrequire_onceするファイルが出てくる場合は尚更読みにくくなる。 | ||
- | * どんだけ初期化に時間かかるんだ。 | ||
- | * 最終的な出力に必要ないクラスまで読み込むとかいらなくない? | ||
- | * 後からクラス追加したらまたここに書くの? | ||
- | * プラグインを他の人が作ったら、require_onceする行まで書かなきゃいけないの? | ||
- | - requireで書く。 | ||
- | * どうせ "PHP Fatal error: Cannot redeclare class" を頻発する。 | ||
- | * 毎回class_existの分岐を書くとか面倒です。 | ||
- | - $class = new Class;した時に、勝手にclassファイルをロードしてくれたら楽なのにね。 | ||
- | - そうだね、autoload使おうね。 | ||
- | |||
- | * autoloadを実装すると | ||
- | - $class = new Class;すると、クラス名を引数にautoloadが呼ばれる。 | ||
- | - じゃあ引数に合わせてクラス定義のあるファイルをrequireすればいいよね。 | ||
- | - というコードを書く。 | ||
- | * spl_autoload_register使って自分用に名前付けしたほうがいいよね。 | ||
- | * まだあんまり実感わかないけど。 | ||
- | |||
- | |||
- | * メモ。 | ||
- | * <code>class CoreAutoload { | ||
- | public static function autoload( $class ) { | ||
- | //class already exists, return true; | ||
- | if( class_exists( $class, false ) || interface_exists( $class, false ) ){ | ||
- | return true; | ||
- | } | ||
- | //extension setting | ||
- | $file = $class.'.php'; | ||
- | $dirs = array('core/','plugins/'); | ||
- | //search class file in directries | ||
- | foreach( $dirs as $value ){ | ||
- | $path = $value . $file; | ||
- | if( is_file($path) ){ | ||
- | require $path; | ||
- | return true; | ||
- | } | ||
- | } | ||
- | } | ||
- | } | ||
- | if(function_exists('__autoload')){ | ||
- | spl_autoload_register('__autoload'); | ||
- | } | ||
- | spl_autoload_register( array('CoreAutoload', 'autoload') ); | ||
- | </code> |