CodeBlanks Logo Icon CodeBlanks

use ile değişken yakalama

PHP kursu · Uzman · Ders 9/54

use ile dış kapsamdaki değişkenleri closure'a yakalamayı öğrenirsin.

use ile dış değişkeni yakala

Bir closure, tanımlandığı kapsamdaki değişkenlere doğrudan erişemez. use anahtar kelimesi ile dış değişkeni içeriye yakalarsın.

Örnek: $msg = 'Merhaba'; $greet = function () use ($msg) { echo $msg; };. Burada $msg closure tanımlandığı anda kopyalanır.

Varsayılan davranış değer ile kopyalamadır. Yani closure içinde $msg değiştirilse bile dışarıdaki $msg etkilenmez.

Referans ile yakalama: &$var

Bazen closure içinde yapılan değişikliğin dışarıyı da etkilemesini istersin. & işareti ile referans ile yakalarsın.

Örnek: function () use (&$counter) { $counter++; }. Burada closure $counter'ın kendisini alır; artırım dış kapsamdaki değişkeni de yükseltir.

Referans, sayaç veya biriktirici (accumulator) desenlerinde yararlıdır; ama dikkatli kullanılır, çünkü durum (state) değiştirir.

Uygulama Vergi oranını use ile yakala

$tax = 0.18; olarak veriliyor. $addTax adında bir closure tanımla: function ($price) use ($tax) ile dışarıdaki $tax'ı yakala ve $price * (1 + $tax) döndür. Sonra echo $addTax(100) . "\n"; ile sonucu yazdır.

Örnek çözümü göster
$addTax = function ($price) use ($tax) { return $price * (1 + $tax); }; yaz. Sonra echo $addTax(100) . "\n"; çağır.
Örnek çözüm:
<?php
// Vergi oranını use ile yakalayan closure yaz
$tax = 0.18;
$addTax = function ($price) use ($tax) {
    return $price * (1 + $tax);
};
echo $addTax(100) . "\n";

Kendini test et

  1. use ile yakalanan değişken varsayılan olarak nasıl kopyalanır?

    • Değer ile (by-value)
    • Referans ile (by-reference)
    • Sabit olarak
    • Yalnızca okuma modunda
    Cevabı göster

    Değer ile (by-value) — Doğru. use, değişkeni değer ile kopyalar; içteki değişiklik dışarıyı etkilemez.

  2. use parantezini tamamla

    <?php
    $msg = 'Merhaba';
    $greet = function () ____ ($msg) {
        return ['text' => $msg];
    };
    print_r($greet());
    
    Cevabı göster
    <?php
    $msg = 'Merhaba';
    $greet = function () use ($msg) {
        return ['text' => $msg];
    };
    print_r($greet());
    
  3. use ile yakalama biçimlerini eşleştir

    use ($x)
    Değer ile yakalar
    use (&$x)
    Referans ile yakalar
    use (&$counter)
    Dış sayacı günceller

Uzman bölümündeki tüm dersler