integer
Bir integer türünde değer şu kümeden bir tamsayıdır: ℤ = {..., -2, -1, 0, 1, 2, ...}.
Bunlara da bakınız:
integer türünde değerler onluk, sekizlik veya onaltılık tabanda belirtilebilirler. değil işleci negatif bir tamsayı belirtmekte kullanılabilir.
İkil integer sayılar PHP 5.4.0 ve sonrasında kullanılabilir.
Sekizlik gösterimde sayıların önüne 0 (sıfır), onaltılık gösterimde 0x ve ikil gösterimde 0b 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)
$a = 0b11111111; // ikil sayı (onluk: 255)
?>
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]+ ikil : 0[bB][01]+ tamsayı : onluk | onaltılık | sekizlik | ikil
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_INT_SIZE
sabitine, olası en büyük değeri PHP 5.0.5'te PHP_INT_MAX
sabitine ve en küçük değeri ise PHP 7'de PHP_INT_MIN
sabitine atanmıştır.
PHP 7 öncesinde, 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, PHP 7 ve sonrasında bir çözümleme hatası çıktılanır.
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 2 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 3 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)
?>
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 sıfıra 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.
Bir resource bir integer sayıya dönüştürülürse, sonuç, PHP tarafından çalışma anında özkaynağa atanan eşsiz özkaynak numarası olacaktır.
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, Windows dışındaki 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!
Bilginize:
PHP 7.0.0 ve sonrasında, tanımsız ve platforma bağlı olmak yerine integer türüne çarpıtıldığında NaN ve Infinity daima sıfır olacaktır.
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.
NULL
daima sıfıra dönüşür (0).
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.