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:

Syntax

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.

Uyarı

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.

Tamsayılarda taşma

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üşüm

Bir 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üşüm

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

Uyarı

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üşüm

Dizgelerin sayılara dönüşümü bölümüne bakınız.

NULL türünden dönüşüm

NULL daima sıfıra dönüşür (0).

Diğer türlerden dönüşüm

Dikkat

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.