2012年10月11日木曜日

オートローダについて(FuelPHP)

久しぶりにFuelPHPネタ。
といっても対した内容ではないですが。

FuelPHPではオートローダによって自作したクラスとかも自動的にロードされるようになっています。
ただし、これには規約があって
・ファイル名とフォルダ名はすべて小文字
・クラス名の中のアンダースコア(_)はフォルダ区切り
というのがあります。

たとえば「fuel/app/classes」に以下のようなディレクトリ構成でfoo.phpを作成した場合
classes
└ libs
  └ foo.php

<?php
class Libs_Foo
{
    function hoge()
    {
    }
}

こんなかんじで実際に使用する場合は
<?php
$foo = new Libs_Foo();
$foo->hoge();

これでOK。

フレームワークを使っていない場合でも
<?php
define('MY_CLASS_PATH', 'classes/');

// autoload
function __autoload($className) {
    $className = ltrim($className, '\\');
     $fileName = '';
     $namespace = '';
    if ($lastNsPos = strripos($className, '\\')) {
        $namespace = substr($className, 0, $lastNsPos);
        $className = substr($className, $lastNsPos + 1);
        $fileName = str_replace('\\', DIRECTORY_SEPARATOR, $namespace);
    }
    $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';

    require MY_CLASS_PATH . $fileName;
}

PSR-0のページに載ってある例をそのままですが
こんなかんじでオートローダを実装しておけば同じようなことができます。

また、SplClassLoaderというのがあって
https://gist.github.com/221634
これが推奨されているものみたいです。



オートローダを使った場合、requireなのかinlucdeなのか、require_onceなのかinlucde_onceなのか。。。
どっちが一般的なんだろう。。。
FuelPHPはrequireみたいなんだけどrequireする前にfile_existsをしているからそれでもいいのかな。



0 件のコメント:

コメントを投稿