PHP闭包不能访问parnt函数参数吗?

cha*_*a0s 1 closures php-closures php-5.3

我一直在为PHP 5.3编写一些代码,我想做类似于我在下面显示的代码.我希望这段代码可以打印'hellohello',但它打印'hello'而不是错误.

看来$ inner闭包不能访问外部函数的参数.这是正常的行为吗?这是一个PHP错误吗?我看不出这怎么可能被认为是正确的行为......

<?php

function outer($var) {

  print $var;

  $inner = function() {
    print $var;
  };
  $inner();
}

outer('hello');
Run Code Online (Sandbox Code Playgroud)

谢谢!

Ski*_*ick 5

您需要使用use关键字.有关详细信息,请参阅

维基百科对此有一些解释:

function getAdder($x)
{
    return function ($y) use ($x) {
        return $x + $y;
     };
}

$adder = getAdder(8);
echo $adder(2); // prints "10"
Run Code Online (Sandbox Code Playgroud)

这里,getAdder()函数使用参数$ x(关键字"use"强制从上下文获取变量)创建一个闭包,它接受额外的参数$ y并将其返回给调用者.

因此,要使您的示例按照您希望的方式工作:

<?php

function outer($var) {

  print $var;

  $inner = function() use ($var) {
    print $var;
  };
  $inner();
}

outer('hello');
Run Code Online (Sandbox Code Playgroud)