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 veyaTraversable
nesneler -
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.