/webodası
PHP Dersleri

PHP Dersleri #5: Veri Tipleri ve Tip Dönüşümleri

Uzmoon · · 6 dk

PHP dilindeki temel skaler ve bileşik veri tiplerini, tür denetleme yöntemlerini ve açık tip dönüşümlerini (type casting) PHP 8 standartlarına uygun çalışan kod örnekleriyle öğrenin.

Bu Dersin Amacı

Bu dersin temel amacı, PHP programlama dilindeki temel skaler ve bileşik veri tiplerini tanımak, bir değişkenin türünü denetlemeyi öğrenmek ve tipler arası dönüşüm mekanizmalarını kavramaktır.

PHP Dilinde Veri Tipleri Nelerdir?

Önceki dersimizde değişkenlerin bellekte veri saklayan isimlendirilmiş alanlar olduğunu görmüştük. PHP esnek tipli (loosely typed) bir dildir; yani bir değişken oluştururken onun hangi tipte veri saklayacağını önceden belirtmeniz gerekmez. Atadığınız değere göre PHP bu türü kendiliğinden belirler. Buna karşın verinin bellekte hangi yapıda tutulduğunu bilmek, doğru işlemler yapabilmek ve yazılım hatalarının önüne geçebilmek adına kritik önem taşır.

PHP dilinde veri tipleri skaler, bileşik ve özel tipler olmak üzere üç ana kümede incelenir. Skaler tipler tek bir değer taşır. Bileşik tipler birden fazla veriyi bir arada organize ederken, özel tipler ise belirli durumlara işaret eder.

Veri Tipi Kategori Tanım Örnek
int (integer) Skaler Pozitif ya da negatif tam sayılar. 42, -17
float (double) Skaler Ondalıklı ve kesirli sayılar. 3.14, -0.85
string Skaler Metinsel ifadeler ve karakter dizileri. "Web Odası"
bool (boolean) Skaler Mantıksal doğruluk durumları (true veya false). true, false
array Bileşik Birden çok değeri tek bir yapıda toplayan diziler. [10, 20, 30]
null Özel Değer atanmamış veya boşluğu ifade eden özel tür. null

Temel Veri Tiplerinin Tanımlanması ve İncelenmesi

PHP içerisinde bir değişkenin veri tipini ve taşıdığı değeri tüm ayrıntılarıyla ekrana basmak için var_dump() fonksiyonu kullanılır. Değişkenin yalnızca tip adını metin olarak almak istediğimizde ise gettype() fonksiyonu tercih edilir.

Aşağıdaki tam ve bağımsız çalışan kod örneğinde, her temel veri tipinden birer değişken tanımlanmış ve hem tip adları hem de ayrıntılı dökümleri ekrana yazdırılmıştır:

<?php

$sayi = 85;
$oran = 12.64;
$baslik = "Web Odasi PHP Egitimi";
$kayitliMi = true;
$bosVeri = null;
$sayiListesi = [5, 15, 25];

echo gettype($sayi) . "\n";
echo gettype($oran) . "\n";
echo gettype($baslik) . "\n";
echo gettype($kayitliMi) . "\n";
echo gettype($bosVeri) . "\n";
echo gettype($sayiListesi) . "\n\n";

var_dump($sayi);
var_dump($oran);
var_dump($baslik);
var_dump($kayitliMi);
var_dump($bosVeri);
var_dump($sayiListesi);

Yukarıdaki kod çalıştırıldığında üretilen çıktı:

integer
double
string
boolean
NULL
array

int(85)
float(12.64)
string(21) "Web Odasi PHP Egitimi"
bool(true)
NULL
array(3) {
  [0]=>
  int(5)
  [1]=>
  int(15)
  [2]=>
  int(25)
}

Veri Tiplerini Denetleme Fonksiyonları

Program akışında bir değişkenden beklenen türde değer gelip gelmediğini doğrulamak için PHP içerisinde is_* kalıbıyla başlayan yardımcı fonksiyonlar yer alır. Bu fonksiyonlar koşul denetimlerinde sıkça kullanılır ve geriye true veya false döndürür.

Aşağıdaki bağımsız çalıştırılabilir örnek üzerinde bu fonksiyonların davranışını inceleyelim:

<?php

$yas = 30;
$metinFiyat = "150.75";
$durum = false;
$sehir = "Istanbul";

var_dump(is_int($yas));
var_dump(is_numeric($metinFiyat));
var_dump(is_float($metinFiyat));
var_dump(is_bool($durum));
var_dump(is_string($sehir));

Yukarıdaki kodun ürettiği çıktı:

bool(true)
bool(true)
bool(false)
bool(true)
bool(true)

Burada $metinFiyat değişkeni tırnak içinde yazıldığı için tipi string olarak kalır; dolayısıyla is_float() sorgusunda false dönerken, sayısal bir içeriğe sahip olduğu için is_numeric() sınamasında true döner.

Tip Dönüşümleri (Type Casting)

PHP dilinde veri tipleri iki farklı biçimde dönüştürülür: PHP tarafından ihtiyaç anında arka planda uygulanan otomatik dönüşüm (type juggling) ve geliştiricinin bilinçli olarak yaptığı açık tip dönüşümü (type casting).

Otomatik Tip Dönüşümü (Type Juggling)

PHP, işlem yapılan bağlama göre veri türünü uygun biçime otomatik olarak uyarlayabilir. Örneğin bir tam sayı ile karakter dizisi ekrana yazdırılmak istendiğinde, tam sayı otomatik olarak karakter dizisi tipine bürünür.

Önemli Sürüm Bilgisi: PHP 8 ile birlikte tür uyumu daha katı hale getirilmiştir. PHP 8 öncesinde sayısal olmayan karakter dizileri matematiksel işlemlerde sessizce sıfıra dönüştürülürken, PHP 8 ve sonrasında bu durum ölümcül hata (TypeError) fırlatır. Bu nedenle harici kaynaklardan gelen verilerde açık dönüşüm uygulamak modern PHP mimarisinde zorunluluktur.

Açık Tip Dönüşümü (Explicit Casting)

Bir değişkenin türünü kesin olarak değiştirmek için ifadenin hemen soluna parantez içerisinde dönüştürülmek istenen tip belirteci yazılır:

Mantıksal (boolean) dönüşümlerde PHP belirli kurallar işletir. Aşağıdaki değerler (bool) dönüşümünde her zaman false kabul edilir:

Bu değerler haricindeki her türlü dolu metin ve sıfırdan farklı sayılar true değerini üretir.

Aşağıdaki örnekte açık tip dönüşümlerinin sonuçları gösterilmektedir:

<?php

$hamSayi = "250";
$sayisalSonuc = (int)$hamSayi;

$agirlik = 74.88;
$tamsayiAgirlik = (int)$agirlik;

$kod = 502;
$metinKod = (string)$kod;

$durumSifir = (bool)0;
$durumSifirMetin = (bool)"0";
$durumBosMetin = (bool)"";
$durumDoluMetin = (bool)"Web Odasi";

var_dump($sayisalSonuc);
var_dump($tamsayiAgirlik);
var_dump($metinKod);
var_dump($durumSifir);
var_dump($durumSifirMetin);
var_dump($durumBosMetin);
var_dump($durumDoluMetin);

Yukarıdaki kodun ürettiği çıktı:

int(250)
int(74)
string(3) "502"
bool(false)
bool(false)
bool(false)
bool(true)

Sık Yapılan Hatalar

Alıştırma

Bir web servisinden karakter dizisi formatında gelen ürün tutarını ("349.99") ve stok adedini ("6") temsil eden iki değişken tanımlayın. Bu değerleri sırasıyla float ve int türlerine dönüştürün. Dönüşümden sonra elde edilen yeni değişkenleri var_dump() fonksiyonu ile ekranda doğrulayın.

Çözüm

<?php

$gelenTutar = "349.99";
$gelenStok = "6";

$tutar = (float)$gelenTutar;
$stok = (int)$gelenStok;

var_dump($tutar);
var_dump($stok);

Çözüm kodunun çıktısı:

float(349.99)
int(6)

Özet

Bu dersimizde PHP içerisindeki temel skaler veri tiplerini (int, float, string, bool), bileşik dizi tipini ve özel null türünü ele aldık. Değişkenlerin türünü gettype() ve is_* fonksiyonlarıyla nasıl denetleyeceğimizi inceledik. Son olarak, modern PHP 8 standartlarında güvenli veri işlemek adına (int), (float), (string) ve (bool) belirteçleriyle açık tip dönüşümü yapmayı öğrendik.

Yazının tamamını ve yorumları sitede aç