integer
Bir integer türünde değer şu kümeden bir tamsayıdır: Z = {..., -2, -1, 0, 1, 2, ...}.
Bunlara da bakınız:
integer türünde değerler onluk, sekizlik veya onaltılık tabanda belirtilebilirler ve önlerinde isteğe bağlı bir + veya - işareti bulunabilir.
Sekizlik gösterimde sayıların önüne 0 (sıfır), onaltılık gösterimde ise 0x getirilir.
Örnek 1 - Tamsayı sayıllar
<?php
$a = 1234; // onluk tabanda bir sayı
$a = -123; // negatif bir sayı
$a = 0123; // sekizlik tabanda bir sayı (onluk: 83)
$a = 0x1A; // onaltılık tabanda bir sayı (onluk: 26)
?>
Biçimsel olarak integer sayılların yapısı:
onluk : [1-9][0-9]* | 0 onaltılık : 0[xX][0-9a-fA-F]+ sekizlik : 0[0-7]+ tamsayı : [+-]?onluk | [+-]?onaltılık | [+-]?sekizlik
Bir integer türün genişliği platforma göre değişir. 32 bitlik
sistemlerde azami değer 2 milyon civarında iken 64 bitlik sistemlerde 9E18
civarındadır. PHP işaretsiz tamsayıları (C'deki unsigned) desteklemez.
integer türün genişliği PHP 4.4.0'da
PHP_INT_SIZE
sabitine ve olası en büyük değeri ise PHP
5.0.5'te PHP_INT_MAX
sabitine atanmıştır.
Sekizlik bir değer içinde geçersiz bir rakam kullanılmışsa (8, 9 gibi) o ve kalan tüm rakamlar yok sayılır.
Örnek 2 - Sekizlik garabeti
<?php
var_dump(01090); // sekizlik: 010, onluk: 8
?>
PHP, integer türünde bir değerin bellekte integer türüne ayrılan genişliğe sığmadığını saptarsa float türünde bir değer olarak ele alır ve bu durum yapılan bir işlem sırasında ortaya çıkmışsa işlemden dönen değer float türünde olur.
Örnek 3 32 bitlik sistemlerde tamsayı taşması
<?php
$büyük_sayı = 2147483647;
var_dump($büyük_sayı);
$büyük_sayı = 2147483648;
var_dump($büyük_sayı);
$milyon = 1000000;
$büyük_sayı = 50000 * $million;
var_dump($büyük_sayı);
?>
Örnek 4 64 bitlik sistemlerde tamsayı taşması
<?php
$büyük_sayı = 9223372036854775807;
var_dump($büyük_sayı); // int(9223372036854775807)
$büyük_sayı = 9223372036854775808;
var_dump($büyük_sayı); // float(9.2233720368548E+18)
$milyon = 1000000;
$büyük_sayı= 50000000000000 * $milyon;
var_dump($büyük_sayı); // float(5.0E+19)
?>
Ne yazık ki, bunun negatif sayılar için her zaman çalışmaması şeklinde kendini gösteren bir PHP yazılım hatası mevcuttu. Örneğin, -50000 * $milyon işleminin sonucu -429496728 olmaktadır. Ancak, her iki terimin işareti pozitif olduğunda hiçbir sorun çıkmamaktadır.
Bu hata PHP 4.1.0'da düzeltilmiştir.
PHP'de sonucun integer türünde elde edileceği bir bölme işlemi mevcut değildir. 1/2 işleminin sonucu float türünde 0.5 değeridir. Bu değer (integer) ile çarpıtılarak aşağı yuvarlamak suretiyle bir tamsayıya dönüştürülebilirse de round() işlevini kullanırsanız dönüşümün nasıl yapılacağını kendiniz belirleyebilirsiniz.
<?php
var_dump(25/7); // float(3.5714285714286)
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7)); // float(4)
?>
integer
türüne dönüşümBir değeri doğrudan integer türüne dönüştürmek için (int) veya (integer) çarpıtmasını kullanabilirsiniz. Ancak, çoğu durumda türü çarpıtmak gerekmez, bir tamsayı değer gerektiren bir işlev veya denetim yapısı, değeri özdevinimli olarak integer türüne dönüştürecektir. Ayrıca, bir değer integer türüne intval() işleviyle de dönüştürülebilir.
Ayrıca, Tür Dönüşümü bölümüne de bakınız.
boolean
türünden dönüşüm
FALSE
, 0'a (sıfır); TRUE
, 1'e
(bir) dönüştürülür.
float
türünden dönüşümfloat türünden integer türüne dönüşümde sayı sıfıra yaklaştırılarak yuvarlanır.
Dönüşüm sonucu integer türüne ayrılan genişliğe (normalde 32 bitlik sistemlerde +/- 2.15e+9 = 2^31, 64 bitlik sistemlerde ise +/- 9.22e+18 = 2^63) sığmıyorsa, float türün hassasiyeti integer türünde tam bir sonuç vermeyeceğinden sonuç tanımsızdır. Bu durumda ne bir uyarı ne de bir bilgi verilir!
Ondalık kısmı integer türüne asla dönüştürmeyin, yoksa beklenmedik sonuçlar elde edebilirsiniz.
<?php
echo (int) ( (0.1+0.7) * 10 ); // çıktısı: 7!
?>
Ayrıca bakınız: Kayan noktalı sayılarda hassasiyet uyarısı.
string
türünden dönüşümDizgelerin sayılara dönüşümü bölümüne bakınız.
Diğer türlerden integer türüne dönüşümün nasıl davranacağı henüz kesin olarak tanımlanmamıştır. Gözlemlediğiniz bir davranışın doğruluğuna güvenmeyiniz, ileride bu davranış hiçbir bilgi verilmeden değiştirilebilir.