Php 变量函数名

Php 变量函数名,php,function,loops,Php,Function,Loops,我有以下清单。。。“中国”、“英国”和“欧盟”。。。此列表将动态添加到 我需要创建一个循环,为列表中的每个项目创建函数。这些函数中的每一个都有完全相同的代码。(有关功能的完整示例,请参见下文)。唯一不同的是函数名。下面您将看到函数名为“filterthis_uk”-对于列表中的每个项目,函数名应为“filterthis_ch”、“filterthis_eu”等 必须有一种方法可以做到这一点,使功能代码不需要重复。唯一改变的是函数名中“\u1”后面的两个字母。之后是列表中项目的值,即。。“英国”、

我有以下清单。。。“中国”、“英国”和“欧盟”。。。此列表将动态添加到

我需要创建一个循环,为列表中的每个项目创建函数。这些函数中的每一个都有完全相同的代码。(有关功能的完整示例,请参见下文)。唯一不同的是函数名。下面您将看到函数名为“filterthis_uk”-对于列表中的每个项目,函数名应为“filterthis_ch”、“filterthis_eu”等

必须有一种方法可以做到这一点,使功能代码不需要重复。唯一改变的是函数名中“\u1”后面的两个字母。之后是列表中项目的值,即。。“英国”、“中国”等。

您可以使用

如果可以更改函数,还可以更改她的名称并将lang作为param发送

function filterthis($lang, $form) { ... }

您应该将国家/地区作为一个参数;这就是参数的用途。

但是如果您觉得需要一个基于函数的API,为什么不创建一个类并使用_callstatic函数呢?这将更容易,更干净,并且不会挤满您的名称空间

class filterCountry
{
  static $countries = ['uk', 'eu', 'ch'];
  static function __callstatic ($country, $args) 
  {
    if (in_array($country, self::$countries))
      /* logic. Note that $form will be under $args[0] */
    else
      /* graceful error handling */
  }
}
你那边的API看起来像

filterCountry::uk($form);
filterCountry::eu($form);
filterCountry::ch($form);
编辑:添加了错误处理。函数方法的问题是,如果函数不存在,它将杀死整个脚本;使用类和_callstatic,您可以提供优雅的错误处理,您只需根据需要扩展国家的数组——或者更好——您可以从另一个来源(如数据库)提取这些国家

编辑2:切换到PHP5数组语法。清洁工


当你觉得你开始需要对你的代码“聪明”时,这是一个错误决定的信号,它会咬你的屁股。

你所问的没有多大意义(为什么有许多相同的函数??),但变量和闭包是可能的:

$list = ['uk','ch','eu'];

foreach($list as $item){

    $filterthis_$item = function(){
        return 'hello';
    }
}

echo $filterthis_uk();
echo $filterthis_ch();
echo $filterthis_eu();

让函数名保持不变并将语言作为参数传递不是更有意义吗<代码>过滤器此($form,$lang)参数/参数,这就是它们的用途。不是被否决的,但您不能像phpindect中那样初始化静态数组您可以D我一直在做,而且效果很好。但是,您不能在数组中动态生成任何值或从变量中提取-数组中的所有数据都必须硬编码。也许您使用的是旧版本的PHP/配置文件?它至少在5.4.19版本上有功能,配置是香草的。正确,刚刚用PHP5.4.7测试过。现在我想知道如果你避免了任何函数调用,你是否可以一直这样做。谢谢你教我一些东西!
filterCountry::uk($form);
filterCountry::eu($form);
filterCountry::ch($form);
$list = ['uk','ch','eu'];

foreach($list as $item){

    $filterthis_$item = function(){
        return 'hello';
    }
}

echo $filterthis_uk();
echo $filterthis_ch();
echo $filterthis_eu();