php-我可以集成具有相同内容、不同名称的函数吗?

php-我可以集成具有相同内容、不同名称的函数吗?,php,function,names,Php,Function,Names,我在一个类中有两个函数,它们基本上做相同的事情: public function fn_a(){ return __FUNCTION__; } public function fn_b(){ return __FUNCTION__; } public function fn_c(){ return __FUNCTION__; } 我需要这些函数保留在它们当前的名称中,因此我故意做了而不是做: public function fn_($letter

我在一个类中有两个函数,它们基本上做相同的事情:

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扩展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;
    };
}
然后,让我们使用creator函数得到三个函数:

$fn_a = creator('a');
$fn_b = creator('b');
$fn_c = creator('c');
现在调用这三个函数:

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

我从来都不擅长解释匿名函数和闭包是如何工作的——但在谷歌上搜索“闭包”应该可以帮助你理解;请注意,您可以阅读有关Javascript中闭包的教程:想法完全相同


(而且,由于闭包在PHP中是新出现的——PHP5.3附带了闭包——您将找不到与Javascript一样多的教程)

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

尽管如此,还是有可能您的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;
    };
}
然后,让我们使用creator函数得到三个函数:

$fn_a = creator('a');
$fn_b = creator('b');
$fn_c = creator('c');
现在调用这三个函数:

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

我从来都不擅长解释匿名函数和闭包是如何工作的——但在谷歌上搜索“闭包”应该可以帮助你理解;请注意,您可以阅读有关Javascript中闭包的教程:想法完全相同

(而且,由于闭包在PHP中是新出现的(PHP5.3附带了闭包),因此您将找不到与Javascript一样多的教程)

像那样


像那样?

你能详细说明这些方法的目的吗,因为tbh,这对我来说没有意义。你能详细说明这些方法的目的吗,因为tbh,这对我来说没有意义。是的,我预计这将是一个障碍。谢谢你的帮助,我还是要坚持重复=]。@Gal:我编辑了我的答案,添加了一些关于闭包的内容——不确定它对你的情况会有帮助,但知道它很有用:-)非常感谢!这确实帮了大忙。我使用的是PHP5,所以我认为这是一个很好的解决方案。我要试试,看看效果如何。不客气:-)(我坚持5.3:闭包在PHP中是不存在的,你也可以用eval来实现这一点。eval的缺点是很多人告诉你不要使用它。是的,我预计这会是一个障碍。谢谢你的帮助,我无论如何都会坚持重复=])@Gal:我已经编辑了我的答案,添加了一些关于闭包的东西——不确定这会有帮助p在你的例子中,但这是很有用的知识:-)非常感谢!这确实帮助很大。我正在使用PHP5,所以我认为这是一个很好的解决方案。我将尝试一下,看看它有多好。不客气:-)(我坚持5.3:闭包在PHP中是不存在的,你也可以用eval来实现这一点。eval的缺点是很多人告诉你不要使用它。