在 php __autoload() 中将驼峰大小写转换为 under_score_case

2022-08-30 15:08:15

PHP手册建议自动加载类,如

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

这种方法可以很好地加载保存在文件中的类,例如FooClassmy_dir/FooClass.php

class FooClass{
  //some implementation
}

问题

我怎样才能使用保存在文件中的功能和访问权限?_autoload()FooClassmy_dir/foo_class.php


答案 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;

推荐