匿名函数-PHP 5.3之前的数组中的闭包对象


anonymous function - Closure objects within arrays before PHP 5.3

我知道用PHP 5.3(匿名函数(可以执行以下操作,但在旧版本(5.3之前(中有类似的替代方案吗?

  $exampleArray = array(  
    'func' => function() {  
      echo 'this is an example';  
      }

是否可以先用__call或将函数类型转换为(对象(来实现这一点?此外,我尝试通过给函数起一个名字来使其匿名,但这似乎不起作用。

如果您想在PHP中创建匿名<5.3,您可以使用CCD_ 1函数。这里还有关于回调的有趣信息(可能很有用(。

使用create_function 的示例

# This (function in other variable is only for cleaner code)
$func = create_function('', "echo 'This is example from anoymus function';");
$exampleArray = array(
  'func' => $func
  );

但你可以用另一种方式做同样的事情:

# Create some function
function func()
{
   # Do something
   echo 'This is example';
}
# Save function name
$func = 'func';

上面的代码创建了一个函数,然后我们将函数名存储在变量中(可以作为参数传递,等等(

当我们只知道函数的名称时调用它:

第一路

$func();

替代

call_user_func($func);

因此,连接以上所有内容的示例:

function primitiveArrayStep(&$array, $function)
{
    # For loop, foreach can also be used here
    for($i = 0; $i < count($array);$i++)
    {
         # Check if $function is callable             
          if( is_callable($function) )
          {
               # Call function
           $function(&$array[$i]);
          }
          else
          {
               # If not, do something here
          }
    }    
}

并使用上述功能:

$array = array('a', 'b', 'c');
$myFunction = create_function('&$e', '$e = $e . " and i was here";');
primitiveArrayStep($array, $myFunction);
echo '<pre>';
var_dump($array);

退货:

array(3) {
  [0]=>
  string(16) "a and i was here"
  [1]=>
  string(16) "b and i was here"
  [2]=>
  string(16) "c and i was here"
}

链接:

  • 回调
  • create_function()
  • call_user_func()
  • is_callable()

是的,可以使用create_function在PHP 5.3之前的版本中创建lamda函数。不可能创建闭包,尽管您的问题提到了它,但实际上并没有使用它。

闭包是一个lamda函数,它可以访问(关闭(其封闭范围中的变量:

$t = new Thingy;
$func = function( $y ) use( $t ) {
    //$t is available here when this function is called;
}

lamda函数是一个匿名函数,可用于存储在变量中或作为参数传递等。您可以使用create_function() pre 5.3,如下所示:

$func = create_function( '$y', 'echo $y;' );
//similar to
$func = function( $y ){ echo $y };
$exampleArray = array(
    'func' => create_function('', 'echo "this is an example"');
);

create_function

创建一个以"func"作为类方法的类怎么样?将在5.3之前或之后工作。