代码之家  ›  专栏  ›  技术社区  ›  Prody

PHP闭包被破坏了还是我遗漏了什么?

  •  8
  • Prody  · 技术社区  · 16 年前

    我一直在阅读PHP5.3的新特性,其中一个主要特性是 闭包 .


    a) 将闭包与匿名函数混淆
    b) 在我正在测试的PHP5.3.1中,闭包被破坏了

    从…起 what wikipedia says 闭包是匿名函数的机制,加上函数父级的作用域变量与函数作用域的绑定。最后一部分似乎在PHP中被破坏了。

    奇怪的是,我检查了PHP错误,却没有发现任何相关信息。

    以下是我的测试方法:

    <?php
    
    function getFun() {
        $x = 2;
        return function() {
            return $x;
        };
    }
    $f = getFun(); // getFun()(); doesn't work -.-
    var_dump($f()); // $f() == null
    

    在实际实现闭包的语言中,它返回2:

    def f():
        x = 2
        return lambda: x
    print(f()()) # prints 2
    

    和

    alert((function() {
        var x = 2;
        return function() {
            return x;
        };
    })()()); // alerts 2
    

    2 回复  |  直到 16 年前
        1
  •  12
  •   just somebody    16 年前

    从外部范围继承的变量需要明确列出。从手册中:

    public function getTotal($tax)
    {
        $total = 0.00;
    
        $callback =
            function ($quantity, $product) use ($tax, &$total)
    ...
    
        2
  •  3
  •   Darrell Brogdon    16 年前

    PHP的闭包实现与您习惯于使用JavaScript时所期望的略有不同。简单的呼唤 function () { return x; } 不起作用,因为你必须利用 use 陈述

    推荐文章