1

我一直在为 PHP 5.3 编写一些代码,我想做一些类似于下面显示的代码的事情。我希望这段代码打印“hellohello”,但它会打印“hello”,并出现错误。

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

<?php

function outer($var) {

  print $var;

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

outer('hello');

谢谢!

4

2 回答 2

5

您需要使用use关键字。有关更多详细信息,请参阅内容。

维基百科对此有一些解释

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');
于 2010-07-10T01:46:11.563 回答
0

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

试试这个

function outer($var) {

  print $var;

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

outer('hello');
于 2010-07-10T01:43:39.477 回答