PHP kapakları kırılmış veya bir şey eksik?

2 Cevap php

PHP 5.3 yeni özellikler hakkında okuma oldum ve önemli özelliklerinden biri closures vardır.

Unless I'm very badly mistaken, the PHP developers are either:
a) confusing closures with just anonymous functions
b) the closures are broken in PHP 5.3.1 in which I'm testing

what wikipedia says kapakları Anonim işlevler artı işlevin kapsamı işlevin ebeveynin kapsamı değişkenlerin bağlanma mekanizması vardır. Son bölümü PHP kırılmış görünüyor.

Ben garip, PHP hataları kontrol, ve bu konuda hiçbir şey buldum.

İşte test kulüpler nasıl:

<?php

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

Aslında kapanışları uygulamak dillerde, 2 verir:

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

ve

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

Yani, ben yanlış ya?

2 Cevap

dış kapsam miras değişkenleri explicitely listelenen gerekebilir. manuel:

public function getTotal($tax)
{
    $total = 0.00;

    $callback =
        function ($quantity, $product) use ($tax, &$total)
...

Kapanışları PHP'nin uygulaması JavaScript kullanarak alışık eğer beklediğinizden biraz farklıdır. Basitçe function () { return x; } Eğer use deyimi yararlanmak gerektiği gibi çalışmaz çağırıyor.