Türler
PHP Manual

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:

Syntax

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.

Uyarı

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

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 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)
?>
Uyarı

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

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, 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!

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.

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.


Türler
PHP Manual