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

PHP中是否有像JavaScript中那样的函数变量?,php,function,variables,Php,Function,Variables,在JavaScript中,您可以有: var blabla = function(arg){ ... }; PHP中有类似的东西吗 我知道create_函数,但将代码塞进字符串参数中确实很复杂。是的,它在PHP5.3.X中提供 是的,它在PHP5.3.X中提供 自PHP5.3.0以来,匿名函数一直可用 自PHP 5.3.0以来,匿名函数可用 它们被称为匿名函数。在这种情况下,您可以: $func = function($a, $b) { return $a + $b; }; $r

在JavaScript中,您可以有:

var blabla = function(arg){
  ...
};
PHP中有类似的东西吗


我知道create_函数,但将代码塞进字符串参数中确实很复杂。

是的,它在PHP5.3.X中提供


是的,它在PHP5.3.X中提供


自PHP5.3.0以来,匿名函数一直可用

自PHP 5.3.0以来,匿名函数可用

它们被称为匿名函数。在这种情况下,您可以:

$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_函数来创建匿名函数。

它们被称为匿名函数。在这种情况下,您可以:

$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_函数来创建匿名函数。

由于PHP 5.3,您可以创建如下匿名函数:

$var = 1;
$func = function( $arg ) use ($var) {
     return $arg + $var;
};
use子句是访问匿名函数外部定义的变量所必需的

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


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

由于PHP 5.3,您可以创建如下匿名函数:

$var = 1;
$func = function( $arg ) use ($var) {
     return $arg + $var;
};
use子句是访问匿名函数外部定义的变量所必需的

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


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

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

$blabla=函数$arg{ ... };
唯一的区别是将var替换为$,并在arg之前添加$。

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

$blabla=函数$arg{ ... };
唯一的区别是将var替换为$,并在arg之前添加$。

谢谢!我想知道是否可以使用outisde变量,因为我无法使用create_函数:如果更改$var,它是否也会在外部更改?是的,它会;使用允许它更改外部变量。只是想知道,声明全局$var;在匿名函数中,默认情况下不能更改外部变量,但可以使用引用来允许更改。我更新了我的答案。@Sven-显式传递引用被弃用为off 5.3。我想这也适用于这种情况?@Demian:Sven提供的示例不是一个通过引用传递呼叫时间的示例。在这种情况下,引用运算符的使用是完全合法的。调用时间按引用传递是指将引用运算符添加到传递到函数的参数中,例如$b=func&$a;-这是不推荐的。谢谢!我想知道是否可以使用outisde变量,因为我无法使用create_函数:如果更改$var,它是否也会在外部更改?是的,它会;使用允许它更改外部变量。只是想知道,声明全局$var;在匿名函数中,默认情况下不能更改外部变量,但可以使用引用来允许更改。我更新了我的答案。@Sven-显式传递引用被弃用为off 5.3。我想这也适用于这种情况?@Demian:Sven提供的示例不是一个通过引用传递呼叫时间的示例。在这种情况下,引用运算符的使用是完全合法的。调用时间按引用传递是指将引用运算符添加到传递到函数的参数中,例如$b=func&$a;-这是不推荐的。我很好奇这个用例。我发现,在OO体系结构中,当正确完成时,很少需要匿名函数。对于你的具体问题,你可能使用了错误的解决方案,也许我对这个问题的回答太多了,但我仍然很好奇:在这种情况下,我没有使用OOP,我仍然是该领域的初学者:基本上我有一个函数a,需要在其中创建一个小函数B,我只需要在A内部使用。如果我正常定义函数,它会与具有相同名称的外部函数冲突,我认为它也可以从外部访问,这是我不想要的。这就是为什么我想知道我是否可以把它作为一个变量…我很好奇这个用例。我发现,在OO体系结构中,当正确完成时,很少需要匿名函数。你可能对你的具体问题使用了错误的解决方案,也许我在深入研究问题
这个问题已经得到了明确的回答,但我还是很好奇:在这种情况下我没有使用OOP,我在这方面还是个初学者:基本上我有一个函数a,需要在其中创建一个小函数B,我只需要在A内部使用。如果我正常定义函数,它会与具有相同名称的外部函数冲突,我认为它也可以从外部访问,这是我不想要的。这就是为什么我想知道我是否可以把它作为一个变量。。。