我的项目中有一个特定的类,它有很多静态和类方法(这是故意的,在这种情况下,使用一个大类而不是许多小类更有意义)。
这些方法是使用下划线大小写来定义的,例如method_name而不是符合 PSR-1 的methodName,我们正在将一堆东西转换为 PSR-1。
现在,我们可以使用类似这些方法(如下)来允许使用其中任何一个(method_name 和 methodName)。优点是我们不会冒险引入新的错误,并且所有使用它的当前代码仍然有效,并且我们可以慢慢迁移它们。
<?php
// enable PSR-1 for class methods
public static function __callStatic($name, $args) {
$toLower = function($c) { return '_'.strtolower($c[1]); };
$underscoreCased = preg_replace_callback('/([A-Z])/', $toLower, $name);
return forward_static_call_array(['ClassName', $underscoreCased], $args);
}
// enable PSR-1 for instance metods
public function __call($name, $args) {
$toLower = function($c) { return '_'.strtolower($c[1]); };
$underscoreCased = preg_replace_callback('/([A-Z])/', $toLower, $name);
return call_user_func_array([$this, $underscoreCased], $args);
}
现在的问题是,这太丑陋了吗?尽管有上面列出的好处,我们是否应该避免这样做?