Bir değeri başka bir türe çevirmek için türü parantez içinde değerin önüne yazın: (int) "42" tam sayı 42 değerini verir. Fonksiyon biçimi intval("42") aynı işi yapar. Dönüştürme hiçbir zaman başarısız olmaz: sayı olmayan metin 0 olur, rakamlarla başlayan bir string ise yalnızca o rakamları korur.
PHP'deki dönüştürmeler (int), (float), (string), (bool), (array) ve (object) şeklindedir. Her birinin bir de fonksiyonu vardır: intval(), floatval(), strval(), boolval().
String'den int'e: (int) ve intval() ne döndürür
PHP, baştaki boşlukları atladıktan sonra stringin başından itibaren rakamları okur ve bir sayıya uymayan ilk karakterde durur. Üs gösterimi sayı sayılır, 0x öneki sayılmaz.
"12.7" değerinin 12 olduğuna dikkat edin: int'e dönüştürmek ondalık kısmı keser, yuvarlamaz. Girdi ne olursa olsun burada ne (int) ne de intval() uyarı yazdırır.
Tabanlı intval()
intval($value, $base) stringi başka bir sayı sisteminde okur. Taban 0 ile PHP öneke bakar: onaltılık için 0x, ikilik için 0b, sekizlik için baştaki 0.
Float'tan int'e: yuvarlama değil, kesme
(int) ondalık noktasından sonraki her şeyi sıfıra doğru atar. En yakın tam sayıyı istiyorsanız önce yuvarlayın ve parantezlere dikkat edin:
Son çift klasik float tuzağıdır: (0.1 + 0.7) * 10 değeri 7.999999... olarak saklanır, bu yüzden kesme 7 verir. Önce yuvarlamak 8 verir. Matematik sayfası round, floor ve ceil fonksiyonlarını anlatır.
bool, string ve array'e dönüştürme
Bool'a dönüştürmede yalnızca birkaç değer false olur: 0, 0.0, "", "0", null ve []. "0.0", " " ve "false" dahil geri kalan her şey true olur.
String'e dönüştürmede true, "1" olur; false ve null ise ikisi de "" olur. Float'lar sondaki .0 kısmını atar, çok büyük veya çok küçük float'lar ise üs gösterimi kullanır.
Bir diziyi stringe dönüştürmek onu birleştirmez. Bu Tags: Array yazdırır:
<?php
$tags = ["php", "web"];
echo "Tags: " . $tags;
ve PHP bir uyarı ekler:
Warning: Array to string conversion in /home/index.php on line 3
Bir diziyi metne çevirmek için implode(", ", $array) veya json_encode($array) kullanın.
Bir bakışta tüm dönüştürmeler
intval, (bool), strval, is_numeric ve gettype fonksiyonlarının bir değer için ne döndürdüğünü görmek için o değeri seçin. Her hücre PHP 8.3 ile hesaplandı.
| $x | intval | bool | strval | is_numeric | gettype |
|---|---|---|---|---|---|
| "10" | |||||
| "1abc" | |||||
| "abc" | |||||
| "" | |||||
| " " | |||||
| "0" | |||||
| "0.0" | |||||
| "1e1" | |||||
| "010" | |||||
| 1.5 | |||||
| true | |||||
| false | |||||
| null | |||||
| [] | |||||
| [1, 2] |
Sayısal stringler ve otomatik dönüşüm
Sayısal string, sayıya benzeyen bir stringdir: "12", "-3.5", "1e3", etrafında isteğe bağlı boşluklarla. PHP bunları aritmetikte otomatik olarak dönüştürür; is_numeric() ise bir stringin buna uyup uymadığını söyler.
"12abc" + 1 yine 13 verir, ama PHP 8 Warning: A non-numeric value encountered yazdırır; "abc" + 1 ise bir TypeError fırlatır. Kullanıcı girdisi üzerinde aritmetik yapmadan önce dönüştürün veya doğrulayın.
settype() ve gettype()
settype() bir değişkenin türünü yerinde değiştirir, gettype() ise onu bildirir. get_debug_type(), hata mesajlarında gördüğünüz daha kısa adları (int, float, string) döndürür.
Çoğu kod bunun yerine bir dönüştürme ($value = (int) $value;) kullanır, çünkü daha kısadır ve aynı şekilde okunur.
Girdiyi dönüştürmek yerine doğrulamak
(int) asla hayır demez, bu yüzden (int) "abc" sessizce 0, (int) "5 apples" ise 5 olur. Form girdisi için FILTER_VALIDATE_INT ile filter_var kullanın: tam sayıyı ya da false döndürür.
Sonucu === false ile karşılaştırın, çünkü 0 geçerli bir tam sayıdır ve == false onu reddederdi. filter_var sayfası aralıkları ve diğer doğrulayıcıları gösterir.
Sıkça Sorulan Sorular
PHP'de bir string nasıl int'e çevrilir?
(int) $str veya intval($str) kullanın; 10 tabanında ikisi aynı sonucu verir. (int) "42" sonucu 42, (int) "12abc" sonucu 12, (int) "abc" sonucu 0 olur. Tam sayı olmayan girdiyi reddetmek için tahmin yürütmek yerine false döndüren filter_var($str, FILTER_VALIDATE_INT) kullanın.
PHP'de intval() ile (int) arasındaki fark nedir?
10 tabanında aynı sonucu döndürürler. intval() ayrıca bir taban alır: intval('ff', 16) sonucu 255 olur ve taban 0 ile 0x, 0b gibi önekleri ve sekizlik için baştaki 0 değerini okur. Bir fonksiyon olduğu için intval, array_map('intval', $values) örneğindeki gibi callback olarak da geçirilebilir.
PHP'de (bool) "0" ne döndürür?
false. "0" stringi, "", 0, 0.0, null ve [] ile birlikte PHP'nin falsy değerlerinden biridir. "0.0", " " ve "false" dahil diğer her string true olur.
PHP'de bir sayı nasıl stringe çevrilir?
(string) $n, strval($n) kullanın ya da onu bir stringin içine koyun: "$n". (string) 3.0 sonucu "3" olur; sabit sayıda ondalık için number_format($n, 2) veya sprintf('%.2f', $n) kullanın.