localdisk

PHP とか Java とか Web とか好きなことを書きます。

autoloadの実装にみる名前空間のない苦しさ

Zend Framework なんかをみるときっついなぁと思う。Zend Frameworkを触ってる人はご存じだと思うのですがZend Frameworkにおいてクラス名に含まれる「_(アンダースコア)」は特別な意味をもってます。なにかというと「_」はDIRECTORY_SEPARATORに置換されるということ。つまりZend_Controller_FrontというクラスはZend\Controller\Front.phpというファイルに書かれてある。便利といえば便利だけど・・・Java出身なのでこれは苦しいぜと感じる。こんな感じ。

<?php
// Zend_Loader#loadclass より抜粋
$file = str_replace('_', DIRECTORY_SEPARATOR, $class) . '.php';

でも代替案が思い浮かばない・・・。kohanaもクラス名にsuffixをつけてるんですよね。「_Core」がついているクラスはこのディレクトリにいますよー、みたいな。PHP5.3から名前空間のサポートが入るのでPHP5.3から作成されたフレームワークはこのへんがドラスティックに変わるんでしょうか。でもバックスラッシュいやだなぁ。小指が遠いよ。
spl_autoload_registerつかって独自のautoloadを書いていたときの悩ましいところでした。