use ile değişken yakalama
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
-
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.
-
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()); -
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