PHP中有像JavaScript一样的函数变量吗?


Is there a function variable in PHP like in JavaScript?

在JavaScript中你可以有:

var blabla = function(arg){
  ...
};

在PHP中有类似的东西吗?

我知道create_function(),但是把你的代码塞进字符串参数里真的很复杂。

从PHP 5.3开始,您可以创建这样的匿名函数:

$var = 1;
$func = function( $arg ) use ($var) {
     return $arg + $var;
};

use子句需要访问匿名函数外部定义的变量。

如果您想更改匿名函数中的外部变量,则必须在use部分中将其声明为引用(通过在$前面添加&):

$var = 1;
$func = function() use ( &$var ) {
   $var = 42;
}
$func();
// $var == 42 now

它们被称为匿名函数。在PHP>= 5.3中,你可以这样做:

$func = function($a, $b) {
    return $a + $b;
};
$result = $func(3, 4); // returns 7

你甚至可以有闭包:

$c = 5;
$func = function($a, $b) use ($c) {
    return ($a + $b) * $c;
};
$result = $func(3, 4); // returns 35

但是要注意:下面的JavaScript片段只能在PHP中使用引用来复制:

var c = 5;
var f = function(a, b) {
    return (a + b) * c;
};
var r = f(3, 4); // returns 35
c = 6;
r = f(3, 4); // returns 42

在PHP中应该是这样的:

$c = 5;
$func = function($a, $b) use (&$c) {
    return ($a + $b) * $c;
};
$result = $func(3, 4); // returns 35
$c = 6;   
$result = $func(3, 4); // returns 42

在5.3之前,你必须使用create_function()来创建匿名函数

是的,它在php 5.3.X中可用

http://php.net/manual/en/functions.anonymous.php

<?php
$greet = function($name)
{
    printf("Hello %s'r'n", $name);
};
$greet('World');
$greet('PHP');
?>

匿名函数从PHP 5.3.0开始可用。链接

语法与JavaScript非常相似;对于您的特定示例,它将类似于以下内容:

$blabla = function($arg){
  ...
};

唯一的区别是将"var"替换为"$",并在"arg"之前添加"$"。