SORU
30 HAZİRAN 2009, Salı


PHP fonksiyonu " ne 5.3.0,; kullanmak" tanımlayıcı?

PHP 5.3.0 bazı özellikler bakıyorum ve oldukça komik görünüyor sitesinde bazı kodlar karşılaştım:

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

    $callback =
        /* This line here: */
        function ($quantity, $product) use ($tax, &$total)
        {
            $pricePerItem = constant(__CLASS__ . "::PRICE_" .
                strtoupper($product));
            $total  = ($pricePerItem * $quantity) * ($tax   1.0);
        };

    array_walk($this->products, $callback);
    return round($total, 2);
}

örnek olarak üzerinde: http://www.php.net/manual/en/functions.anonymous.php

Herkes bunu biliyor mu? Herhangi bir belge? Ve kötü görünüyor, şimdiye kadar kullanılmalıdır?

CEVAP
24 NİSAN 2012, Salı


Basit bir cevap.

function ($quantity) use ($tax, &$total) { .. };

  1. Kapatma fonksiyonu bir değişkene atanır, kaldı
  2. Kapatma ayrı bir ad, normalde değişkenler bu ad dışında tanımlanmış erişebilirsiniz. Bu geliyorkullanınanahtar kelime:
  3. kullanın(kullanmak) başarılı erişim sağlar kapatılması iç değişkenler.
  4. kullanınerken bağlama. Bu değişken değerleri kapatılması TANIMLAMA üzerine KOPYALANIR anlamına gelir. Yani kapatma içinde $tax değiştirme bir nesne gibi bir işaretçi olduğu sürece hiçbir dış etkiye sahiptir.
  5. &$total halinde gibi işaretçi değişkenler iletebilirsiniz. Bu şekilde, $total değerini değiştirerek bir dış etki, orijinal değişkenin değerini değiştirir.
  6. Değişkenler kapatılması içinde tanımlanan kapatılması dışarıdan erişilebilir değildir.
  7. Kilitler ve işlevleri aynı hız var. Evet, bu komut dosyalarının hepsini kullanabilirsiniz.

@pointed out muhtemelen en iyi Mytskine detaylı açıklama RFC for closures. (Bunun için onu Upvote.)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Chaoticmoogle

    Chaoticmoogl

    13 ŞUBAT 2006
  • Easy Learn Tutorial

    Easy Learn T

    10 Kasım 2012
  • megablueblaster

    megablueblas

    23 HAZİRAN 2006