PHP 闭包无法访问父函数参数吗?

发布于 2024-09-08 17:42:54 字数 329 浏览 4 评论 0原文

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

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

<?php

function outer($var) {

  print $var;

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

outer('hello');

谢谢!

I've been writing some code for PHP 5.3, and I wanted to do something similar to the code I'm showing below. I expect this code to print 'hellohello', but it prints 'hello' instead, and an error.

It appears the $inner closure does not have access to the outer function's parameters. Is this normal behavior? Is it a PHP bug? I can't see how that could be considered correct behavior...

<?php

function outer($var) {

  print $var;

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

outer('hello');

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

烙印 2024-09-15 17:42:54

您需要使用 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');

You need to use the use keyword. See this for more details.

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"

Here, getAdder() function creates a closure using parameter $x (keyword "use" forces getting variable from context), which takes additional argument $y and returns it to the caller.

So, to make your example work the way you want it to:

<?php

function outer($var) {

  print $var;

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

outer('hello');
冷情 2024-09-15 17:42:54

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

尝试这个的 范围

function outer($var) {

  print $var;

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

outer('hello');

I would guess that the $inner function doesn't have the scope to access $var

Try this

function outer($var) {

  print $var;

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

outer('hello');
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文