将CamelCase转换为php __autoload()中的under_score_case

P.M*_*P.M 28 php camelcasing autoload

PHP手册建议自动加载类

function __autoload($class_name){
 require_once("some_dir/".$class_name.".php");
}
Run Code Online (Sandbox Code Playgroud)

并且这种方法可以很好地加载FooClass保存在文件中的my_dir/FooClass.php

class FooClass{
  //some implementation
}
Run Code Online (Sandbox Code Playgroud)

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

Rik*_*ood 68

你可以像这样转换类名...

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

  • 注意:这会将MyCClassName转换为my_cclass_name而不是my_c_class_name. (5认同)
  • 来自@DanielG的评论如果你想要除了第一个以外的每个大写字母都得到一个下划线:`strtolower(preg_replace('/(?<!^)([AZ])/','_ $ 1',$ class_name)) `.@ rik-heywood提供的这个和答案之间的唯一区别是MyCClassName变为my_c_class_name而不是my_cclass_name. (3认同)