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

时间:2010-07-10 01:42:18

标签: closures php-5.3 php-closures

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

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

<?php

function outer($var) {

  print $var;

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

outer('hello');

谢谢!

2 个答案:

答案 0 :(得分:5)

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

Wikipedia has some explanation of this

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

$adder = getAdder(8);
echo $adder(2); // prints "10"
  

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

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

<?php

function outer($var) {

  print $var;

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

outer('hello');

答案 1 :(得分:0)

我猜想$ inner函数没有访问$ var

的范围

试试这个     

function outer($var) {

  print $var;

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

outer('hello');