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

Ale*_*lex 1 php variables function

在JavaScript中,您可以:

var blabla = function(arg){
  ...
};
Run Code Online (Sandbox Code Playgroud)

在PHP中有这样的东西吗?

我知道create_function(),但是在字符串参数中填充代码真的很复杂.

Sve*_*ven 7

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

$var = 1;
$func = function( $arg ) use ($var) {
     return $arg + $var;
};
Run Code Online (Sandbox Code Playgroud)

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

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

$var = 1;
$func = function() use ( &$var ) {
   $var = 42;
}
$func();
// $var == 42 now
Run Code Online (Sandbox Code Playgroud)

否则,匿名函数中所做的更改将不会传播到外部.


Ste*_*rig 5

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

$func = function($a, $b) {
    return $a + $b;
};

$result = $func(3, 4); // returns 7
Run Code Online (Sandbox Code Playgroud)

你甚至可以关闭:

$c = 5;
$func = function($a, $b) use ($c) {
    return ($a + $b) * $c;
};

$result = $func(3, 4); // returns 35
Run Code Online (Sandbox Code Playgroud)

但请注意:以下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
Run Code Online (Sandbox Code Playgroud)

在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
Run Code Online (Sandbox Code Playgroud)

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