29

PHPマニュアルは、次のようなクラスを自動ロードすることを提案しています

function __autoload($class_name){
 require_once("some_dir/".$class_name.".php");
}

FooClassこのアプローチは、ファイルに保存されたクラスをロードするのにうまく機能しmy_dir/FooClass.phpます

class FooClass{
  //some implementation
}

質問

ファイルに保存された_autoload()機能とアクセスを使用できるようにするにはどうすればよいですか?FooClassmy_dir/foo_class.php

4

2 に答える 2

71

このようにクラス名を変換できます...

function __autoload($class_name){
    $name = strtolower(preg_replace('/([a-z])([A-Z])/', '$1_$2', $class_name));
    require_once("some_dir/".$name.".php");
}
于 2009-10-19T15:54:40.863 に答える
2

これはテストされていませんが、クラス名を変換するために以前に似たようなものを使用しました。私の関数もO(n)で実行され、低速の逆参照に依存しないことを付け加えるかもしれません。

// lowercase first letter
$class_name[0] = strtolower($class_name[0]);

$len = strlen($class_name);
for ($i = 0; $i < $len; ++$i) {
    // see if we have an uppercase character and replace
    if (ord($class_name[$i]) > 64 && ord($class_name[$i]) < 91) {
        $class_name[$i] = '_' . strtolower($class_name[$i]);
        // increase length of class and position
        ++$len;
        ++$i;
    }
}

return $class_name;
于 2009-10-19T15:56:47.507 に答える