我的课程中有几个功能,这些功能基本上做同样的事情:

public function fn_a(){
        return __FUNCTION__;
}
public function fn_b(){
        return __FUNCTION__;
}
public function fn_c(){
        return __FUNCTION__;
}

我需要这些功能才能保留在当前名称中,所以我有意 不是 做:

public function fn_($letter){
        return __FUNCTION__.$letter;
}

我希望在此处缩小代码的冗长性,因为它们都同样。最终情况将是这样的:

public functions fn_a, fn_b, fn_c() {
      return __FUNCTION__;
}

另一个解决方案(如果适用)可能正在做类似班级的“扩展”之类的事情:fn_b, fn_c extend fn_a?

你们觉得怎么样?

有帮助吗?

解决方案

像您建议的那样的任何语法都是不可能的:如果您想要几个不同的函数,则必须声明所有这些功能。

尽管如此,您的fn_a,fn_b和fn_c函数可能只是简单的包装器即可成为一个更复杂的包装器:

public function fn_a(){
    return fn_all('a');
}
public function fn_b(){
    return fn_all('b');
}
public function fn_c(){
    return fn_all('c');
}

public function fn_all($name) {
    // a lot of complex stuff here
}

因此,取决于 fn_all 功能当然,您将减少代码删除量的量。



另一个想法 (不确定如何使用方法完成,因此我将通过功能演示) 将是使用闭合 - 这意味着php> = 5.3

基本想法是您将拥有第一个函数,它将返回另一个功能 - 它将将传递给第一个参数的参数绑定到第一个函数:

首先,创建其他的功能:

function creator($name) {
    return function () use ($name) {
        return $name;
    };
}

然后,让我们获得三个功能,使用该创建者一个:

$fn_a = creator('a');
$fn_b = creator('b');
$fn_c = creator('c');

现在,调用这三个功能:

echo $fn_a() . '<br />';
echo $fn_b() . '<br />';
echo $fn_c() . '<br />';

我们将获得以下输出:

a
b
c


我从不擅长解释匿名功能和关闭如何工作 - 但是在Google上搜索“关闭”应该可以帮助您理解;请注意,您可以在JavaScript中阅读有关关闭的教程:这个想法完全相同。

(而且,由于封闭是新的PHP - 带有PHP 5.3的封口 - 您不会找到与JavaScript一样多的教程)

其他提示

public function fn_catcher($letter) {
        return __FUNCTION__.$letter;
}

public function __call($name) {
        if (substr($name, 0, 3) == 'fn_')
        {
              return $this->fn_catcher($name);
        }
}

像那样?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top