我的项目中有一个特定的类,它有很多静态和类方法(这是故意的,在这种情况下,更有意义的是,使用一个大类而不是许多小类)。
这些方法是使用下划线的情况定义的,例如 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);
}
现在的问题是,这太丑了吗?尽管有上述好处,我们应该避免这样做吗?
答案 0 :(得分:1)
我不会这样做有几个原因:
__call()
,__callStatic()
,__get()
,...)很慢,非常非常慢,shown here do_something
,但您的代码调用Object::doSomething()
。这是我检查实现的障碍,因为我不能简单地按Ctrl + F查看doSomething
。 IDE和代码完成也是如此。所以,基本上我的建议是:如果你真的需要将这个类迁移到PSR-1,那么要么一次性完成,要么让它成为。但是,不要仅仅为了符合命名方案而引入魔术函数。