PHP 8'de parametre veri tipleri, fonksiyonlara veya metotlara geçilen argümanların hangi türde olması gerektiğini tanımlayan özelliklerdir. PHP, veri tiplerini kontrol ederek kodun güvenilirliğini ve hataların erken yakalanmasını sağlar. PHP 7'den itibaren gelen tip belirleyici (type hinting) özellikleri PHP 8 ile daha da gelişmiştir.
PHP'de tip tanımlamaları aşağıdaki temel veri türlerini destekler:
-
Basit veri tipleri:
int,float,string,bool -
Diziler:
array -
Nesneler: Sınıf adları veya
object - İnterface'ler: Belirli bir interface’i uygulayan nesneler
-
callable: Çağrılabilir türler (fonksiyon veya method) -
iterable: Dizi veyaTraversablenesneler -
mixed: PHP 8 ile tanıtılan çoklu tip -
union types: PHP 8 ile gelen birleşik tipler (birden fazla tip seçeneği)
1. Temel Veri Tipleri
PHP 8, fonksiyon veya metod parametrelerine geçilecek temel veri türlerini açıkça belirlememizi sağlar. Bu, bir parametre için belirlenen tür dışında bir veri türü gönderildiğinde bir hata fırlatır.
Örnek:
function topla(
int $a, int $b
): int {
return $a + $b;
}
echo topla(5, 10); // 15 çıktısını verir
Bu örnekte, int tipi ile iki parametre alındığı belirtilmiştir. Eğer bu fonksiyona int olmayan bir değer (örneğin bir string) geçirilirse, PHP 8 hata fırlatır.
Yanlış kullanım örneği:
echo topla("5", "10"); // TypeError hatası: Argument 1 passed to topla() must be of the type int
Bu durumda, PHP 8, "5" ve "10" değerlerinin string olduğu için bir hata verir.
2.
array Tipi
Bir fonksiyonun parametresi olarak sadece dizilerin (array) kabul edilmesi gerektiğini belirtebilirsiniz.
Örnek:
function diziyiYazdir(
array $dizi
) {
foreach ($dizi as $eleman) {
echo $eleman . "
";
}
}
diziyiYazdir([1, 2, 3]); // 1 2 3 çıktısını verir
Bu örnekte, fonksiyon yalnızca array türünde bir parametre kabul eder.
Yanlış kullanım:
diziyiYazdir("Merhaba"); // TypeError hatası: Argument 1 passed to diziyiYazdir() must be of the type array
Bu örnekte, string türünde bir değer geçirildiği için PHP 8 hata fırlatır.
3.
object ve Sınıf Tipleri
Bir parametreyi belirli bir sınıf veya object türünde tanımlayarak, sadece bu türden nesnelerin parametre olarak geçilmesine izin verebilirsiniz.
Örnek:
class Araba {
public $model;
public
function __construct(
$model
) {
$this->model = $model;
}
}
function arabaBilgisi(Araba $araba
) {
echo "Arabanın modeli: " . $araba->model;
}
$bmw = new Araba("BMW");
arabaBilgisi($bmw); // "Arabanın modeli: BMW" çıktısını verir
Bu örnekte, sadece Araba sınıfından nesneler fonksiyona geçirilebilir.
Yanlış kullanım:
arabaBilgisi("Bir araba"); // TypeError hatası: Argument 1 passed to arabaBilgisi() must be an instance of Araba
Burada bir string geçirilirse, PHP 8 hata verecektir.
4.
callable Tipi
Bir fonksiyon parametresi olarak, çağrılabilir bir tür (fonksiyon veya metot) belirtilebilir.
Örnek:
function fonksiyonCagir(
callable $fonksiyon
) {
$fonksiyon();
}
fonksiyonCagir(function() {
echo "Bu bir anonim fonksiyon!";
});
Bu örnekte, callable parametresi bir fonksiyon bekler. Geçirilen fonksiyon, fonksiyon içinde çalıştırılır.
5.
iterable Tipi
PHP 7.1'den itibaren, hem dizileri hem de Traversable (iterasyon yapılabilir) nesneleri kabul eden iterable tipi kullanılabilir.
Örnek:
function elemanlariYazdir(
iterable $elemanlar
) {
foreach ($elemanlar as $eleman) {
echo $eleman . "
";
}
}
elemanlariYazdir([1, 2, 3]); // 1 2 3 çıktısını verir
Bu örnekte, iterable tipi, hem dizileri hem de nesneleri kabul eder.
6.
mixed Tipi (PHP 8 ile Tanıtıldı)
PHP 8'de yeni eklenen
mixed
tipi, bir parametrenin birden fazla veri türünü kabul edebileceğini belirtir. mixed, şu veri türlerini kapsar: int, float, string, bool, array, object, callable, null.
Örnek:
function yazdir(
mixed $deger
) {
echo $deger;
}
yazdir("Merhaba"); // "Merhaba" çıktısını verir
yazdir(123); // "123" çıktısını verir
yazdir(3.14); // "3.14" çıktısını verir
Bu örnekte, mixed tipi farklı veri türlerini kabul eder.
7. Union Types (Birleşik Tipler)
PHP 8 ile gelen birleşik tipler (union types), birden fazla veri türünün aynı parametrede kullanılmasına izin verir. Bu özellik, bir parametrenin birden fazla veri türü kabul edebileceğini açıkça belirtir.
Örnek:
function islemYap(
int|float $sayi
) {
return $sayi * 2;
}
echo islemYap(10); // 20 çıktısını verir
echo islemYap(2.5); // 5 çıktısını verir
Bu örnekte, fonksiyon hem int hem de float türünde değerleri kabul edebilir. Eğer farklı bir türde değer gönderilirse PHP 8 bir hata fırlatır.
8. Varsayılan Değer ve Tip Kontrolü
PHP 8'de parametrelere varsayılan değerler atanabilir, ancak varsayılan değerin tanımlanan veri türüyle uyumlu olması gerekir. Eğer uyumsuz bir varsayılan değer atanırsa PHP hata verecektir.
Örnek:
function yazdir(
int $sayi = 10
) {
echo $sayi;
}
yazdir(); // 10 çıktısını verir
Burada, varsayılan değer int olduğu için uyumludur ve hata oluşmaz.
Yanlış kullanım:
function yazdir(
int $sayi = "On"
) {
echo $sayi;
}
Bu örnekte, varsayılan değer olarak string atanmıştır, ancak int beklenmektedir. PHP 8 bu durumda hata fırlatır.
Sonuç
PHP 8'de parametre veri tipleri, fonksiyonlara ve metotlara geçilen argümanların türünü kesin olarak tanımlamanıza olanak tanır. Bu sayede tip uyumsuzlukları daha erken tespit edilir ve kodun güvenilirliği artar. PHP 8 ile gelen union types ve mixed gibi yeni özellikler, daha esnek ve güçlü tip yönetimi sağlar.