代码之家  ›  专栏  ›  技术社区  ›  JoeCortopassi Dan

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

c php
  •  3
  • JoeCortopassi Dan  · 技术社区  · 16 年前

    有人知道我怎么写一个函数吗?这个函数可以用变量的内容来创建其他函数。

    下面是我在PHP中所说内容的一个基本示例:

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

    有人知道一种可以让我这样做的语言吗?

    5 回复  |  直到 16 年前
        1
  •  6
  •   Pekka    16 年前

    可以使用以下命令在PHP中创建匿名函数: create_function() . 可以将每个匿名函数赋给一个变量 $newfunctionname 并使用 call_user_func() :

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

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

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

        2
  •  2
  •   Sarfraz    16 年前

    您可能需要使用 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

        3
  •  2
  •   Lucas Oman    16 年前

    如果您使用的是php 5.3,那么可以使用lambdas:

    for ($i=0;$i<10;$i++) {
      $funcName = 'node'.$i;
      $$funcName = function ($something) {
        // do something
      }
    }
    
    $node7('hello');
    
        4
  •  1
  •   Björn    16 年前

    您可以使用 create_function() .

        5
  •  -2
  •   Svante Svenson    16 年前

    你为什么要这么做?

    在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、…点头9不做任何事。

    推荐文章