Bir PHP fonksiyonu function anahtar kelimesi, bir ad, bir parametre listesi ve bir gövdeyle tanımlanır; return çağırana bir değer gönderir. function add(int $a, int $b): int { return $a + $b; } onu tanımlar, add(2, 3) ise çağırır ve 5 döndürür.
Parametrelerden önceki string ve int tür bildirimleridir, parantezlerden sonraki : string ise dönüş türüdür. İkisi de isteğe bağlıdır, ama hataları erken yakalar ve fonksiyonun ne beklediğini belgeler.
Dönüş değerleri ve birkaç değer döndürme
return fonksiyonu hemen bitirir. return içermeyen ya da çıplak bir return; içeren bir fonksiyon null döndürür; yalnızca etkisi için çağrılıyorsa : void bildirin. Bir fonksiyon tek bir değer döndürür, ama bu değer çağıran tarafta ayrıştıracağınız bir dizi olabilir:
[...] = söz diziminin diğer biçimleri için dizi ayrıştırma sayfasına bakın.
Varsayılan parametreler ve adlandırılmış argümanlar
= value içeren bir parametre isteğe bağlıdır: çağıranlar onu yazmayabilir. İsteğe bağlı parametreler zorunlu olanlardan sonra gelir. PHP 8.0'dan beri adlandırılmış argümanlar çağıranın herhangi bir parametreyi adıyla vermesine izin verir, böylece ihtiyacınız olmayan isteğe bağlı parametreleri atlayabilirsiniz.
Adlandırılmış argümanlar yerleşik fonksiyon çağrılarını da okunur yapar: str_pad('7', 3, '0', pad_type: STR_PAD_LEFT). Parametre adı fonksiyonun genel arayüzünün bir parçası olur, bu yüzden bir parametreyi yeniden adlandırmak ad kullanan çağıranları bozabilir.
Referansla aktarma
Normalde PHP her argümanın bir kopyasını aktarır, bu yüzden fonksiyon çağıranın değişkenini değiştiremez. Bir parametrenin önündeki & değişkenin kendisini aktarır. sort() gibi yerleşik fonksiyonlar bu şekilde çalışır.
Yeni bir değer döndürmek genellikle bir argümanı değiştirmekten daha açıktır. Referansları, fonksiyon gerçekten bir şeyi yerinde değiştirmek için yapıldığında kullanın.
Tür bildirimleri ve strict_types
Varsayılan olarak PHP argümanları mümkün olduğunda bildirilen türe dönüştürür: add("5", 3) "5" değerini 5 yapar. Dosyanın en üstüne declare(strict_types=1); koymak bunu o dosyada yapılan çağrılar için kapatır, böylece yanlış bir tür dönüştürülmek yerine bir TypeError fırlatır.
declare satırı olmadan aynı çağrı 8 yazdırır. "five" gibi sayı olmayan dizgeler her iki modda da bir TypeError fırlatır.
Parametreler ve dönüş değerleri için bildirebileceğiniz türler:
never, her zaman hata fırlatan veya çıkış yapan fonksiyonlar için bir dönüş türüdür. Sınıf ve arayüz adları da tür olarak çalışır.
...$args ile değişken sayıda argüman
...$numbers istenen sayıda argümanı bir dizide toplar. Çağıran taraftaki aynı ... bir diziyi ayrı argümanlara açar.
Bir fonksiyon içinde dışarıdaki bir değişkeni kullanma
Bir fonksiyonun kendi kapsamı vardır. Dışında tanımlanan bir değişken içeride görünmez; bu JavaScript'ten gelenleri şaşırtır:
<?php
$taxRate = 0.2;
function priceWithTax(float $price): float
{
return $price * (1 + $taxRate); // $taxRate is undefined here
}
Warning: Undefined variable $taxRate in /path/to/index.php on line 6
ve fonksiyon fiyatı vergisiz döndürür. Bunun yerine değeri bir parametre olarak içeri verin. Bu, fonksiyonun neye bağlı olduğu konusunda dürüst kalmasını ve kolay test edilmesini sağlar:
global anahtar kelimesi de çalışır ama bağımlılığı gizler; değişken kapsamı bunu anlatır. array_map() için geri çağırmalar gibi başka fonksiyonlara verilen kısa fonksiyonlar için dışarıdaki değişkenleri use ile yakalayabilen anonim fonksiyonlar sayfasına bakın.
Sıkça Sorulan Sorular
PHP'de nasıl fonksiyon tanımlarım?
function anahtar kelimesini, bir adı, parantez içinde parametreleri ve bir gövdeyi kullanın: function add(int $a, int $b): int { return $a + $b; }. Onu add(2, 3) olarak çağırın. Fonksiyon adları büyük küçük harfe duyarsızdır ve bir dosyanın en üst seviyesinde tanımlanan bir fonksiyon, onu tanımlayan satırdan önce çağrılabilir.
Bir PHP fonksiyonundan birden çok değeri nasıl döndürürüm?
Bir dizi döndürün ve onu ayrıştırın: function minMax(array $a): array { return [min($a), max($a)]; } sonra [$min, $max] = minMax([3, 1, 4]);. Adlandırılmış sonuçlar için ilişkisel bir dizi döndürün ve ['min' => $min] = ... kullanın.
declare(strict_types=1) ne işe yarar?
O dosyadan yapılan çağrılar için otomatik tür dönüşümünü kapatır, böylece bir int parametresine "5" vermek onu 5 değerine dönüştürmek yerine bir TypeError fırlatır. Dosyadaki ilk deyim olmalıdır ve yalnızca o dosyayı etkiler.
PHP'de adlandırılmış argümanlar nedir?
PHP 8.0'dan beri argümanları parametre adıyla verebilirsiniz: htmlspecialchars($s, double_encode: false). Konumsal olanlardan sonra herhangi bir sırada verilebilirler ve değiştirmek istemediğiniz isteğe bağlı parametreleri atlamanızı sağlarlar.
PHP'de bir değişkeni referansla nasıl aktarırım?
Parametrenin önüne & koyun: function addOne(int &$n): void { $n++; }. Fonksiyon o zaman çağıranın değişkenini değiştirir. & olmadan PHP bir kopya aktarır ve çağıranın değişkeni aynı kalır.