Подтвердить что ты не робот

Преобразование CamelCase в under_score_case в php __autoload()

Руководство по PHP предлагает для автозагрузки таких классов, как

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

и этот подход отлично подходит для загрузки класса FooClass, сохраненного в файле my_dir/FooClass.php, например

class FooClass{
  //some implementation
}

Вопрос

Как я могу использовать функцию _autoload() и получить доступ к FooClass, сохраненный в файле my_dir/foo_class.php?

4b9b3361

Ответ 1

Вы можете преобразовать имя класса, как это...

function __autoload($class_name){
    $name = strtolower(preg_replace('/([a-z])([A-Z])/', '$1_$2', $class_name));
    require_once("some_dir/".$name.".php");
}

Ответ 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;