便利ですよね
spl_autoload_register
newした時にそのクラスが無ければ探しに行ってくれる というような感じです。
ということで簡単な使い方です。
document_root/
├index.php
└class/
├Hoge/
│ └hoge.class.php
└Fuga/
└fuga.class.php
1 2 3 |
class hoge{ function __construct(){} } |
1 2 3 |
class fuga{ function __construct(){} } |
的な感じのファイル構成だとしましょうか。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
spl_autoload_register(function ($class_name) { /** * 適宜エスケープはしておいたほうが良いですよ。 * ディレクトリトラバーサルとかあるので */ $class_name = strtolower($class_name); $Class_name = ucfirst($class_name); if(file_exists('./class/'.$Class_name. '/' .$class_name.'.class.php')){ require './class/'.$Class_name. '/' .$class_name.'.class.php'; } }); $INS_FUGA = new fuga(); $INS_HOGE = new hoge(); |
って感じにしておけばOK。
また、
require
する時に
1 |
$autoload_list[] = './class/'.$Class_name. '/' .$class_name.'.class.php'; |
みたいな事してやれば、デバッグで$autoload_listを出力させてやれば、どんな順番でclassが読まれてるか分かる。
で、file_existsのif にelse付けてやって
1 |
$autoload_list[] = '■■■Not Found■■■ =>>>>./class/'.$Class_name. '/' .$class_name.'.class.php'; |
ってしとくのもありっちゃ有りです。
(try catch で例外受けるほうがいいと思うけど割愛)
spl_autoload_register部分を共通ファイルとかにしちゃえば、classのロードのためにいちいちrequire_onceとかしなくて済みます。
クラスの命名規則と設置場所さえルーリングされていれば、requireが100個あろうが200個あろうが書く必要は無いです。
この記事を書いた人

-
株式会社ホットポット(現 イー・ガーディアン株式会社)(アルバイト)2005年1月~2006年4月
↓
株式会社エディア 2006年4月〜2007年7月
↓
株式会社パクレゼルヴ 2007年8月〜2010年7月
↓
グルーポン・ジャパン株式会社 2010年8月〜2011年12月
↓
ミューズコー株式会社 2012年2月3日〜2013年12月31日
株式会社パクレゼルヴ からの出向扱いにて所属。
↓
株式会社PRECS 2014年1月
いっぱい会社渡り歩いてるように見えるけど、転職は1回しかしてません!
最新記事
開発日誌2015.03.03q Text as Data
開発日誌2015.01.23ソケットでメールを送ってみよう
開発日誌2015.01.19CSSやJS等が更新してもキャッシュされてしまって困っちゃう!
開発日誌2015.01.16spl_autoload_registerでrequire_onceだらけのソースをスッキリさせましょう。