WhatsApp

Bölüm 03: PHP’de Türler

PHP, esnek ve dinamik bir dil olmasına rağmen güçlü bir tür sistemine sahiptir. Veri türleri, değişkenlerin nasıl davranacağını ve hangi işlemleri gerçekleştirebileceğini belirler. Bu yazıda, PHP’nin tür sistemini ve çeşitli veri türlerini detaylıca ele alacağız.

Tür Sistemi: Güvenliği Ele Geçirin

PHP, zayıf ve dinamik türleme (weak & dynamic typing) kullanan bir dildir, yani değişkenlerin türlerini açıkça belirtmek zorunda değilsiniz. Ancak, PHP 7 ve sonrası ile gelen tür bildirimleri (type declarations) ve katı tür denetimi (strict types) sayesinde daha güvenli ve hatasız kod yazmak mümkün hale geldi.

// Tür belirtmeden değişken tanımlama
$degisken = 10; // integer
$degisken = "Merhaba"; // string

Strict Types Kullanımı:

declare(strict_types=1); // Türleri katı hale getirir

/* 
topla isimli fonksiyon integer türünde a ve b parametreleri alır.
dönüş tipi olarak integer belirlenmiştir.
/*
function topla(int $a, int $b): int {
    return $a + $b;
}

// Geçerli kullanım
echo topla(5, 10); // 15

// Geçersiz kullanım
echo topla("a", 10); // strict_types kullanımı ile PHP hata fırlatır.

Veri Türleri: Saptırılamaz Yapılar

PHP’de bulunan temel veri türlerini üç ana gruba ayırabiliriz:

  1. Basit Türler: null, bool, int, float, string
  2. Bileşik Türler: array, object, callable, iterable, enum
  3. Özel Türler: resource, mixed, void, never, false, true, self, parent, static

Basit Türler

Null Veri Türü: Hükümsüz Veriler

Bir değişkenin hiç değer taşımadığını ifade eder. NULL, yalnızca şu durumlarda olur:

  • null atanmışsa
  • Tanımlanmamış bir değişkene erişiliyorsa
  • unset() fonksiyonu ile silinmişse
$degisken = null;
var_dump($degisken); // NULL çıktısı verir

Boolean (bool) Veri Türü: Doğru veya Yanlış

Boolean türü yalnızca true (doğru) ve false (yanlış) değerlerini alır.

$a = true;
$b = false;

Bazı değerler boolean dönüşümünde false olarak kabul edilir:

  • 0 (sıfır)
  • 0.0 (sıfır float)
  • “” (boş string)
  • null
  • [] (boş dizi)

Boolean değerler genellikle koşul ifadelerinde kullanılır:

if ($a) {
    echo "Koşul doğru!";
}

Integer (int) Veri Türü: Tamsayılar

Tam sayıları ifade eder. 32-bit sistemlerde -2,147,483,648 ile 2,147,483,647 arasında, 64-bit sistemlerde daha geniş bir aralıkta değer alır.

$sayi = 42;
var_dump($sayi); // int(42)
$negatifSayi = -5;
var_dump($negatifSayi); // int(-5)

PHP 7 ile binary (ikilik) gösterim de desteklenmiştir:

$binary = 0b1010; // 10

Float Veri Türü: Ondalıklı Sayılar

Ondalıklı sayıları temsil eder.

$pi = 3.14;
var_dump($pi); // float(3.14)

Veya bilimsel gösterim ile kullanılabilir:

$bilimsel = 1.2e3; // 1200
var_dump($bilimsel); // float(1200)

String Veri Türü: Metinsel İfadeler

Metinsel ifadeleri temsil eder. Çift veya tek tırnak içinde yazılır.

$ad = "PHP";
$mesaj = 'Merhaba, ' . $ad . '!';
var_dump($mesaj); // string(13) "Merhaba, PHP!"

PHP 7 ile string içi değişken kullanımında performans iyileştirmeleri yapıldı:

$ad = "PHP";
echo "Selam, $ad!"; // Selam, PHP!

Numeric String Veri Türü: Sayı Barındıran Metin

PHP’de bir string içinde yalnızca rakamlar varsa, sayısal dize (numeric string) olarak değerlendirilir.

$deger = "42";
$toplam = $deger + 8; // 50 olarak işlem yapılır

Ancak dikkat! Sayısal olmayan karakterler hata verebilir.

Bileşik Türler

Array Veri Türü: Diziler

Diziler, birden fazla değeri tek bir değişkende saklamamızı sağlar.

$renkler = ["kırmızı", "mavi", "yeşil"];

Object Veri Türü: Nesneler

PHP, nesne yönelimli programlamayı destekler. object türü, bir sınıftan türetilmiş nesneleri içerir.

class Araba {
    public $marka;
    function __construct($marka) {
        $this->marka = $marka;
    }
}
$bmw = new Araba("BMW");

Callable Veri Türü: Geri Çağrımlı Yapılar

Bir fonksiyon veya metodun çağrılabilir olup olmadığını kontrol eder.

function selam() {
    echo "Merhaba!";
}
$callback = "selam";
$callback(); // Merhaba!

Iterable Veri Türü: Döngüyle İşlenebilir Yapılar

PHP 7.1 ile gelen iterable türü, diziler (array) ve Traversable arayüzünü implemente eden nesneleri kapsar. Yani, bir değişken foreach ile dolaşılabiliyorsa, iterable olarak kabul edilir.

Not: Traversable, PHP’de foreach ile dolaşılabilir sınıfları tanımlayan temel bir arayüzdür.

function sirala(iterable $elemanlar) {
    foreach ($elemanlar as $eleman) {
        echo $eleman . " ";
    }
}
sirala([1, 2, 3]);

Enum Veri Türü: Sayılamalar (PHP v8.1)

PHP 8.1 ile gelen enum, belirli sabit değerler tanımlamayı sağlar.

enum Renkler {
    case Kirmizi;
    case Yesil;
    case Mavi;
}

$renk = Renkler::Mavi;

Özel Türler

Resource Veri Türü: Kaynaklar

Dış kaynaklara işaret eden türdür (veritabanı bağlantısı, dosya açma vb.).

$dosya = fopen("test.txt", "r");
var_dump($dosya); // resource

Mixed Veri Türü: Karışık Türler (PHP v8.0)

Birden fazla veri türünü kabul edebilen değişkenler için kullanılır (PHP 8 ile birlikte gelmiştir).

function ornek(mixed $deger) {
    var_dump($deger);
}
ornek("metin");
ornek(123);

Voide Veri Türü: Boş Dönenler

Bir fonksiyonun geri dönüş değeri olmadığını belirtir.

function bos(): void {
    echo "Bu fonksiyon değer döndürmez.";
}

Never Veri Türü: Asla Dönüş Yapmayanlar (PHP v8.1)

Bir fonksiyonun asla geri dönüş yapmayacağını belirtir (PHP 8.1 ile birlikte gelmiştir).

function dur(): never {
    exit("Bu fonksiyon asla geri dönmez.");
}

Parent, Self, Static Veri Türleri: Kalıtımı Yönetenler

Sınıflar içindeki tür bildirimlerinde kullanılır.

class A {
    public static function test(): self {
        return new self();
    }
}

False ve True Veri Türleri: Doğru veya Yanlış (PHP v8.0)

Bazı fonksiyonlar yalnızca false veya true döndürebilir. PHP 8 ile bu türler resmiyet kazanmıştır.

function kontrol(): false|int {
    return rand(0, 1) ? 42 : false;
}

Tür Bildirimleri ve Tür Dönüşümü

PHP’de tür bildirimleri ile fonksiyonlara güçlü türleme eklenebilir.

function carp(int $a, int $b): int {
    return $a * $b;
}

PHP’de tür dönüşümü ise otomatik veya manuel yapılabilir.

$deger = "10";
$intDeger = (int) $deger; // String -> int dönüşümü

PHP’deki türler, programlama yaparken hataları önlemek ve kodun güvenilirliğini artırmak için büyük önem taşır. Veri türlerini doğru kullanarak daha güvenli ve performanslı uygulamalar geliştirebilirsiniz.

Bölüm Sonu Canavarı: PHP Tür Testi

PHP, zayıf ve dinamik türleme özelliğine sahip olmasına rağmen, tür bildirimleri ve strict_types desteği sayesinde daha güvenli ve hatasız kod yazmaya olanak tanır. Türleri doğru kullanarak daha sağlam, daha güvenli ve daha verimli PHP uygulamaları geliştirebilirsiniz! 

📌 Görev: Aşağıdaki değişkenlerin hangi türde olduğunu tahmin edebilir misin? var_dump() kullanarak her değişkenin veri türünü kontrol et ve tahminlerinle karşılaştır!

$degisken1 = "42" + 8;
$degisken2 = (bool) 0;
$degisken3 = 10.0 / 2;
$degisken4 = [1, 2, "üç"];
$degisken5 = fopen("dosya.txt", "r");

📌 Görev: Aşağıdaki kodda neler olduğunu anlayabiliyor musun? strict_types etkin olduğunda bu kod nasıl davranır? strict_types devre dışı olsaydı ne olurdu?

declare(strict_types=1);

function islem(int $sayi): float {
    return $sayi / 2;
}

echo islem(10);
echo islem("20");

📌 Görev: Aşağıdaki iki kod parçası çok benzer görünüyor, ancak işleyişleri farklı! Hangisi daha iyi bir kullanım? Dizi mi, nesne mi? Hangi durumlarda biri diğerine tercih edilmelidir?

$veri = ["isim" => "Ahmet", "yas" => 25];
echo $veri["isim"];
class Kisi {
    public string $isim;
    public int $yas;
}

$veri = new Kisi();
$veri->isim = "Ahmet";
$veri->yas = 25;
echo $veri->isim;

📌 Görev: Aşağıdaki kodda tür bildirimleri ekleyerek kodun daha güvenli olmasını sağla. strict_types kullanmayı unutma!

function toplama($a, $b) {
    return $a + $b;
}

echo toplama(5, "10");

📌 Görev: Aşağıdaki kod neden never türünü kullanıyor? never türünün amacı nedir? Hangi durumlarda kullanılmalıdır?

function kritikHata(string $mesaj): never {
    throw new Exception($mesaj);
}

kritikHata("Sistem çöktü!");

Posted in PHP Eğitimi
Write a comment