int

Bir int türünde değer şu kümeden bir tamsayıdır: ℤ = {..., -2, -1, 0, 1, 2, ...}.

Sözdizimi

int türünde değerler onluk, sekizlik veya onaltılık tabanda belirtilebilirler. değil işleci negatif bir int belirtmekte 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. PHP 8.1.0 ve sonrasında sekizlik gösterim ayrıca, 0o veya 0O ile öncelenmiş de olabilir.

PHP 7.4.0'dan itibaren, tamsayı değişmezleri, değişmez değerlerin daha iyi okunabilirliği için rakamlar arasında alt çizgi (_) içerebilir. Bu alt çizgiler PHP'nin tarayıcısı tarafından kaldırılır.

Örnek 1 - Tamsayı değişmezler

<?php
$a
= 1234; // onluk sayı
$a = -123; // negatif sayı
$a = 0123; // sekizlik sayı (onluk: 83)
$a = 0o123; // sekizlik sayı (PHP 8.1.0 ve sonrası)
$a = 0x1A; // onaltılık sayı (onluk: 26)
$a = 0b11111111; // ikil sayı (onluk: 255)
$a = 1_234.567; // onluk sayı (PHP 7.4.0 ve sonrası)
?>

PHP 8.1.0'dan itibaren, biçimsel olarak, int değişmezlerinin yapısı (evvelce, 0o ve 0O sekizlik öneklerine ve PHP 7.4.0'dan önce alt çizgilere izin verilmezdi):

 onluk : [1-9][0-9]*(_[0-9]+)* | 0 onaltılık : 0[xX][0-9a-fA-F]+(_[0-9a-fA-F]+)* sekizlik : 0[oO]?[0-7]+(_[0-7]+)* ikil : 0[bB][01]+(_[01]+)* tamsayı : onluk | onaltılık | sekizlik | ikil 

Bir intr 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. int türün genişliği PHP_INT_SIZE sabitine, olası en büyük değeri PHP_INT_MAX sabitine ve en küçük değeri ise PHP_INT_MIN sabitine atanmıştır.

Tamsayılarda taşma

PHP, int türünde bir değerin bellekte int 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 int türünde elde edileceği bir bölme işleci mevcut değildir, bunu sağlamak için intdiv() işlevini kullanın. 1/2 işleminin sonucu float türünde 0.5 değeridir. Bu değer (int) 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)
?>

int türüne dönüşüm

Bir değeri doğrudan int 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 int değer gerektiren bir işlev veya denetim yapısı, değeri kendiliğinden int türüne dönüştürecektir. Ayrıca, bir değer int türüne intval() işleviyle de dönüştürülebilir.

Bir resource bir inte 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.

bool 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 int türüne dönüşümde sayı sıfıra yaklaştırılarak yuvarlanır. PHP 8.1.0 ve sonrasında, örtük dönüşümdeki hassasiyet kaybından dolayı işlemin önerilmediğini belirten bir uyarı çıktılanmaktadır.

<?php

function foo($value): int {
return
$value;
}

var_dump(foo(8.1)); // "Önerilmiyor: float 8.1 değerin int türüne örtük
// olarak dönüştürülmesi hassasiyet kaybı oluşturduğundan PHP 8.1.0 ve
// sonrasında önerilmemektedir.
var_dump(foo(8.1)); // PHP 8.1.0 öncesinde 8
var_dump(foo(8.0)); // Her iki durumda 8

var_dump((int)8.1); // Her iki durumda 8
var_dump(intval(8.1)); // Her iki durumda 8
?>

Dönüşüm sonucu int 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 int türünde tam bir sonuç vermeyeceğinden sonuç tanımsızdır. Bu durumda ne bir uyarı ne de bir bilgi verilir!

Bilginize:

int türüne çarpıtıldığında NaN ve Infinity daima sıfır olacaktır.

Uyarı

Ondalık kısmı int 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

Dize sayısal veya öncü sayısal ise, karşılık gelen tamsayı değerine çözümlenir, aksi takdirde sıfıra (0) dönüştürülür.

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

To Top