差分
この文書の現在のバージョンと選択したバージョンの差分を表示します。
| 次のリビジョン | 前のリビジョン | ||
|
programming:php:autoload:start [2011/07/07 08:04] yuki 作成 |
— (現在) | ||
|---|---|---|---|
| ライン 1: | ライン 1: | ||
| - | ====== __autoload ====== | ||
| - | * PHPでクラス実装をし始めたら、require_onceを多用することになった。 | ||
| - | - require_onceは遅い。 | ||
| - | * http://blog.apecell.com/2007/10/22/id/19 | ||
| - | * index.phpにrequire_onceがひたすら並ぶ。 | ||
| - | * 途中でrequire_onceするファイルが出てくる場合は尚更読みにくくなる。 | ||
| - | * どんだけ初期化に時間かかるんだ。 | ||
| - | * 最終的な出力に必要ないクラスまで読み込むとかいらなくない? | ||
| - | * 後からクラス追加したらまたここに書くの? | ||
| - | * プラグインを他の人が作ったら、rewuire_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; | ||
| - | } | ||
| - | } | ||
| - | } | ||
| - | |||
| - | }</code> | ||
