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

Kaynak: https://webodasi.com/php-dersleri-5-veri-tipleri-ve-tip-donusumleri/
Yazar: Uzmoon
Yayın: 2026-11-09
Güncelleme: 2026-11-09

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

 

- `is_int()`: Değerin tam sayı olup olmadığını sınar.
- `is_float()`: Değerin ondalıklı sayı olup olmadığını sınar.
- `is_string()`: Değerin karakter dizisi olup olmadığını kontrol eder.
- `is_bool()`: Değerin mantıksal (boolean) olup olmadığını denetler.
- `is_null()`: Değerin null olup olmadığını doğrular.
- `is_array()`: Değerin bir dizi olup olmadığını bildirir.
- `is_numeric()`: Değerin doğrudan sayı ya da sayıya dönüştürülebilir bir karakter dizisi olup olmadığını inceler.

 

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:

 

- `(int)` veya `(integer)`: Hedef değeri tam sayıya çevirir.
- `(float)` veya `(double)`: Hedef değeri ondalıklı sayıya çevirir.
- `(string)`: Hedef değeri karakter dizisine çevirir.
- `(bool)` veya `(boolean)`: Hedef değeri mantıksal türe çevirir.
- `(array)`: Hedef değeri diziye çevirir.

 

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:

 

- Tam sayı `0` ve ondalıklı sayı `0.0`
- Boş karakter dizisi `""` ve yalnızca sıfır barındıran `"0"` karakter dizisi
- Elemanı bulunmayan boş dizi `[]`
- Özel `null` değeri

 

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

 

- **"0" karakter dizisinin mantıksal false sayılması:** PHP dilinde metin içinde yer alan `"0"` değeri mantıksal türe dönüştürüldüğünde `false` kabul edilir. Formlardan gelen tek basamaklı sıfır girdilerinde bu durum denetim hatalarına neden olabilir.
- **Ondalıklı sayıların int dönüşümünde kesilmesi:** Bir `float` değer `(int)` türüne dönüştürüldüğünde en yakın tam sayıya yuvarlanmaz; virgülden sonraki kesirli kısım doğrudan atılır. Örneğin `74.88` değeri `74` olur. Yuvarlama ihtiyacında `round()` fonksiyonu kullanılmalıdır.
- **PHP 8 hata modelinin unutulması:** Eski sürümlerde çalışan ve sayısal olmayan metinlerle yapılan örtük dönüşümler, PHP 8 ve sonrasında `TypeError` oluşturur. Form ve API verilerini kullanmadan önce tür denetimi yapılmalıdır.
- **gettype() ile var_dump() arasındaki farkı gözden kaçırmak:** `gettype()` fonksiyonu yalnızca tür adını metin olarak sunarken, `var_dump()` değişkenin türüyle birlikte uzunluğunu ve gerçek değerini ekrana basar. Hata ayıklama süreçlerinde `var_dump()` kullanılmalıdır.

 

## 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.
