Değişken Sayıda Parametre Kullanımı
Basit bir toplama fonksiyonuyla başlayalım. İki sayıyı toplayan bir topla fonksiyonu düşünelim:
PHP:
function add($x, $y) {
return $x + $y;
}
echo add(2, 3); // Çıktı: 5
Peki ya değişken sayıda parametre kabul etmek istersek? Geleneksel yöntemde func_get_args() kullanılabilir:
PHP:
function add() {
return array_sum(func_get_args());
}
echo add(2, 3, 4); // Çıktı: 9
Ancak bu yaklaşımın bir sorunu var: diziler, boolean değerler veya string ifadeler gönderirseniz beklenmedik sonuçlar alabilir veya bu değerler görmezden gelinebilir.
Variadic Fonksiyonlar
Daha temiz ve modern bir çözüm, variadic fonksiyonları kullanmaktır. Bu yöntemle değişken sayıda parametreyi açıkça belirtebilirsiniz:
PHP:
function add(int ...$numbers) {
return array_sum($numbers);
}
echo add(2, 3, 4); // Çıktı: 9
Buradaki int ...$numbers sözdizimi, fonksiyonun istediğiniz kadar integer parametre alabileceği anlamına gelir. Eğer integer olmayan bir değer gönderirseniz, PHP fatal error verir ve hataları erken aşamada yakalamanıza yardımcı olur.
Dizilerde Spread (Yayma) Operatörü
PHP 7.4 ile birlikte, spread operatörünün (...) diziler içinde kullanılması mümkün hale geldi. Bu sayede iç içe dizileri tek bir dizi haline getirebilirsiniz.Örneğin:
PHP:
$array1 = ['foo', 'bar'];
$array2 = ['baz'];
$combined = [...$array1, ...$array2];
print_r($combined);
// Çıktı: ['foo', 'bar', 'baz']
Bu işlem dizileri düzleştirerek tek bir dizi oluşturur.
Sabit değerlerle birlikte de kullanabilirsiniz:
PHP:
$numbers = [1, 2];
$moreNumbers = [3, 4];
$allNumbers = [0, ...$numbers, ...$moreNumbers, 5];
print_r($allNumbers);
// Çıktı: [0, 1, 2, 3, 4, 5]
Dikkat: Anahtarlı Diziler (Associative Arrays)
Spread operatörünü string anahtarlara sahip dizilerle (associative arrays) kullanırken dikkatli olun. PHP, string anahtarlı dizileri açmaya izin vermez ve hata verir:
Kod:
Fatal error: Cannot unpack array with string keys
Pratik Örnek: Başlangıç Değeriyle Toplama
Sabit bir başlangıç değerini, değişken sayıda parametreyle birleştirebilirsiniz:
PHP:
function add(int $initial, int ...$numbers) {
return $initial + array_sum($numbers);
}
echo add(3, 4, 3); // Çıktı: 10
Alternatif olarak, bir dizi değeri de açabilirsiniz:
PHP:
function add(int $initial, int ...$numbers) {
return $initial + array_sum($numbers);
}
$nums = [4, 3];
echo add(3, ...$nums); // Çıktı: 10