Menu
Coddy logo textTech

Closure'lar ve 'use'

Coddy'nin PHP Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 2 / 68.

Varsayılan olarak, anonim fonksiyonlar yalnızca kendilerine parametre olarak aktarılan değişkenlere erişebilirler. Ancak closure'ınızın çevreleyen kapsamdaki bir değişkene erişmesi gerekirse ne olur? İşte burada use anahtar kelimesi devreye girer.

use anahtar kelimesi, bir closure'ın (kapanışın) üst kapsamından değişkenleri "yakalamasına" ve bunları fonksiyon içinde kullanmasına olanak tanır:

<?php
$message = "Welcome";

$greeting = function($name) use ($message) {
    echo $message . ", " . $name . "!";
};

$greeting("Bob");  // Çıktı: Welcome, Bob!
?>

$message değişkeninin fonksiyonun dışında tanımlandığına, ancak parametre listesinden sonra use ($message) ifadesini ekleyerek closure'ın bu değişkene erişebildiğine ve onu kullanabildiğine dikkat edin. Birden fazla değişkeni virgülle ayırarak yakalayabilirsiniz: use ($var1, $var2).

Bu özellik, closure'ları çok daha güçlü hale getirerek, anonim fonksiyonların esnekliğini korurken aynı zamanda çevreleyen bağlamdaki verilerle çalışmalarına olanak tanır.

challenge icon

Görev

Kolay

Çevreleyen kapsamdan bir indirim yüzdesini use anahtar kelimesini kullanarak yakalayan anonim bir fonksiyon oluşturun. Fonksiyon, parametre olarak bir fiyat almalı ve indirimi uyguladıktan sonra nihai fiyatı döndürmelidir.

İki girdi alacaksınız: indirim yüzdesi ve orijinal fiyat. Her iki girdiyi de okuyun, indirim yüzdesini yakalayan bir closure oluşturun, closure'ı fiyat ile çağırın ve indirimden sonraki nihai fiyatı yazdırın.

Girdi formatı: İki satır - ilk satır indirim yüzdesini (bir sayı), ikinci satır orijinal fiyatı (ondalık sayılar içerebilen bir sayı) içerir

Beklenen çıktı: İndirim uygulandıktan sonraki nihai fiyat

Kendin dene

<?php
// Girdileri oku
$discount = floatval(fgets(STDIN));
$price = floatval(fgets(STDIN));

// TODO: 'use' kullanarak indirim yüzdesini yakalayan anonim bir fonksiyon oluşturun
// Fonksiyon bir price parametresi almalı ve indirimden sonraki nihai fiyatı döndürmelidir


// TODO: Closure'ı price ile çağırın ve sonucu saklayın


// Nihai fiyatı yazdır
echo $finalPrice;
?>
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık ve Akış bölümündeki tüm dersler