Php:在for()循环中创建函数

Php:在for()循环中创建函数,php,c,Php,C,有人知道我如何编写一个函数,能够创建其他函数,使用变量的内容作为它的名称吗 下面是我在php中谈论的一个基本示例: function nodefunctioncreator() { for ($i =1, $i < 10, $i++) { $newfunctionname = "Node".$i; function $newfunctionname() { //code for each of the func

有人知道我如何编写一个函数,能够创建其他函数,使用变量的内容作为它的名称吗

下面是我在php中谈论的一个基本示例:

function nodefunctioncreator()
  {
    for ($i =1, $i < 10, $i++)
      {
      $newfunctionname = "Node".$i;
      function $newfunctionname()
        {
        //code for each of the functions
        }
      }
  }
函数nodefunctioncreator()
{
对于($i=1,$i<10,$i++)
{
$newfunctionname=“节点”。$i;
函数$newfunctionname()
{
//每个函数的代码
}
}
}
有人知道允许我这样做的语言吗?

您可以使用

示例:

$newfunc = create_function('$a,$b', 'return "ln($a) + ln($b) = " . log($a * $b);');
echo "New anonymous function: $newfunc\n";
echo $newfunc(2, M_E) . "\n";
// outputs
// New anonymous function: lambda_1
// ln(2) + ln(2.718281828459) = 1.6931471805599

示例源代码:php.net

您可以使用动态创建函数。

您可以使用在php中创建匿名函数。您可以将每个匿名函数分配给变量
$newfunctionname
,并使用以下命令执行它:

我认为这是PHP中最接近的一种方式,看起来不像是完全的黑客行为


我认为不可能直接从变量定义函数。这样做对我来说也不太好,因为这些函数会污染名称空间。如果匿名函数不起作用,这就需要一种面向对象的方法。

为什么要这样做

在Javascript中,这也是可能的:

function nodefunctioncreator(){
  var o = {};
  for(var i = 1, i < 10, i++) {
    o["Node" + i] = function(){
      //code for each of the functions
    }
  }
  return o;
}
函数nodefunctioncreator(){
var o={};
对于(变量i=1,i<10,i++){
o[“节点”+i]=函数(){
//每个函数的代码
}
}
返回o;
}

调用函数时返回一个包含函数Node1、Node2等的对象。。。Node9什么都做不好。

如果您使用的是PHP5.3,您可以使用lambdas:

for ($i=0;$i<10;$i++) {
  $funcName = 'node'.$i;
  $$funcName = function ($something) {
    // do something
  }
}

$node7('hello');

<代码> >($i=0;$i)几乎所有的动态语言都支持这一点。例如,LISP,Stand和SimultAcess。编译的语言如C和C++几乎从来没有做过。但是,您可以在所有(大多数)动态语言JavaScript、Python等中这样做。这在PHP中是必需的。
for ($i=0;$i<10;$i++) {
  $funcName = 'node'.$i;
  $$funcName = function ($something) {
    // do something
  }
}

$node7('hello');