Referans ile Değer Aktarımı
Coddy'nin PHP Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 7 / 68.
Varsayılan olarak, PHP'de bir fonksiyona bir değişken geçirdiğinizde, fonksiyon o değişkenin değerinin bir kopyasını alır. Bu, fonksiyon içinde yapılan herhangi bir değişikliğin fonksiyon dışındaki orijinal değişkeni etkilemediği anlamına gelir.
Ancak, bazen bir fonksiyonun orijinal değişkeni doğrudan değiştirmesini istersiniz. Referans ile geçme (passing by reference) burada devreye girer. Fonksiyon tanımınızdaki parametre adının önüne bir ampersand (&) ekleyerek, PHP'ye bir kopya yerine gerçek değişkeni geçmesini söylersiniz:
<?php
function doubleValue(&$number) {
$number = $number * 2;
}
$value = 10;
doubleValue($value);
echo $value; // Çıktı: 20
?>Fonksiyondan herhangi bir şey döndürmememize rağmen $value değerinin 10'dan 20'ye nasıl değiştiğine dikkat edin. &$number parametresi, orijinal $value değişkenine doğrudan bir bağlantı oluşturarak fonksiyonun bu değişkeni doğrudan değiştirmesine olanak tanır.
Bu teknik, bir fonksiyonun birden fazla değişkeni değiştirmesine ihtiyaç duyduğunuzda veya kopyalamanın verimsiz olacağı büyük veri yapılarıyla çalışırken özellikle yararlıdır.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Görev
KolayÜç parametre alan updateInventory adında bir fonksiyon oluşturun: bir miktar (quantity) değişkenine referans, eklenecek bir miktar ve çıkarılacak bir miktar. Fonksiyon, ilk miktarı ekleyerek ve ikinci miktarı çıkararak orijinal miktarı değiştirmelidir.
Üç girdi alacaksınız: başlangıç miktarı, eklenecek miktar ve çıkarılacak miktar. Her üç girdiyi de okuyun, başlangıç miktarıyla bir değişken oluşturun, miktar değişkenini referans yoluyla eklenecek ve çıkarılacak miktarlarla birlikte updateInventory fonksiyonuna göndererek çağırın ve güncellenmiş miktarı yazdırın.
Giriş formatı: Üç satır - ilk satır başlangıç miktarını (bir sayı), ikinci satır eklenecek miktarı (bir sayı), üçüncü satır çıkarılacak miktarı (bir sayı) içerir
Beklenen çıktı: Ekleme ve çıkarma işlemlerinden sonraki güncellenmiş miktar
Kopya kağıdı
Varsayılan olarak, PHP değişkenleri fonksiyonlara değerine göre (bir kopyasını) aktarır. Orijinal değişkeni değiştirmek için, parametre adından önce bir ampersand (&) ekleyerek referansla aktarma yöntemini kullanın:
<?php
function doubleValue(&$number) {
$number = $number * 2;
}
$value = 10;
doubleValue($value);
echo $value; // Çıktı: 20
?>&$number parametresi, orijinal değişkene doğrudan bir bağlantı oluşturarak fonksiyonun bir değer döndürmeden değişkeni değiştirmesine olanak tanır. Bu, birden fazla değişkeni değiştirmek veya büyük veri yapılarıyla verimli bir şekilde çalışmak için kullanışlıdır.
Kendin dene
<?php
// Girdileri oku
$initialQuantity = intval(fgets(STDIN));
$amountToAdd = intval(fgets(STDIN));
$amountToRemove = intval(fgets(STDIN));
// Miktar değişkenini oluştur
$quantity = $initialQuantity;
// TODO: Burada referans parametresi alan updateInventory fonksiyonunu oluşturun
// TODO: updateInventory fonksiyonunu miktar referansı ile çağırın
// Güncellenmiş miktarı yazdır
echo $quantity;
?>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
1İleri Seviye Fonksiyonlar
Anonim FonksiyonlarClosure'lar ve 'use'Ok Fonksiyonları (Arrow Functions)Geri Çağırma (Callback) Fonksiyonları'call_user_func' KullanımıDeğişken FonksiyonlarReferans ile Değer AktarımıÖz Yinelemeli (Recursive) FonksiyonlarÖzet: Fonksiyon Karması4Çok Boyutlu Diziler
2 Boyutlu Dizi Oluşturma2 Boyutlu Dizi Elemanlarına Erişme2 Boyutlu Dizi Elemanlarını Değiştirmeİç İçe Döngülerle Yineleme2 Boyutlu İlişkisel DizilerÖzet: Basit Izgara Egzersizi2İleri Düzey Dizi İşlemleri
'array_push' ile Ekleme'array_pop' ile Silme'array_unshift' ile Ekleme'array_shift' ile Silmeİndisli Dizileri Birleştirmeİlişkisel Dizileri Birleştirme'array_slice' ile Kesit Alma'in_array' ile Değer Kontrolü'array_search' ile Anahtar AramaÖzet: Çalma Listesi Alıştırması3Dizileri Sıralama
İndisli Dizileri Artan Sırada Sıralamaİndisli Dizileri Azalan Sırada Sıralamaİlişkisel Dizileri Değere Göre Sıralamaİlişkisel Dizileri Anahtara Göre SıralamaDoğal Sıralama (Natural Order)'usort' ile Özel SıralamaÖzet: Liderlik Tablosu Sıralama