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

时间:2010-01-21 18:55:34

标签: php c

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

以下是我在php中讨论的一个基本示例:

function nodefunctioncreator()
  {
    for ($i =1, $i < 10, $i++)
      {
      $newfunctionname = "Node".$i;
      function $newfunctionname()
        {
        //code for each of the functions
        }
      }
  }

有人知道允许我这样做的语言吗?

5 个答案:

答案 0 :(得分:6)

您可以使用create_function()在PHP中创建匿名函数。您可以将每个匿名函数分配给变量$newfunctionname并使用call_user_func()执行它:

$newfunctionname = "Node".$i;
$$newfunctionname = create_function('$input', 'echo $input;'); 
// Creates variables named Node1, Node2, Node3..... containing the function

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

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

答案 1 :(得分:2)

您可能希望使用create_function

示例:

$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

答案 2 :(得分:2)

如果您使用的是PHP 5.3,则可以使用lambdas:

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

$node7('hello');

答案 3 :(得分:1)

您可以使用create_function()即时创建功能。

答案 4 :(得分:-2)

你为什么要这样做?

同样在Javascript中这是可能的:

function nodefunctioncreator(){
  var o = {};
  for(var i = 1, i < 10, i++) {
    o["Node" + i] = function(){
      //code for each of the functions
    }
  }
  return o;
}

调用函数返回一个包含函数Node1,Node2,... Node9的对象,什么都不做。