Egész számok
Egy integer a következő halmaz része: Z = {..., -2, -1, 0, 1, 2, ...}.
Lásd még a Tetszőleges pontosságú egészek, Lebegőpontos számok és BCMath tetszőleges pontosságú matematikai függvények című részeket.
Szintaxis
Az egészek megadhatók decimális (10 alapú), hexadecimális (16 alapú) vagy oktális (8 alapú) számként, opcionális előjellel (- vagy +).
Ha az oktális formát választod, a számot egy 0 (nulla) jeggyel kell kezdened, ha a hexadecimálisat, akkor 0x-el.
Example#1 Egész értékek
<?php
$a = 1234; # decimális szám
$a = -123; # negatív szám
$a = 0123; # oktális szám (megegyezik a 83 decimális számmal)
$a = 0x1A; # hexadecimális szám (megegyezik a 26 decimális számmal)
?>
decimal : [1-9][0-9]* | 0 hexadecimal : 0[xX][0-9a-fA-F]+ octal : 0[0-7]+ integer : [+-]?decimal | [+-]?hexadecimal | [+-]?octal
Ha egy érvénytelen számjegy szerepel egy oktális egészben, a szám hátralevő része figyelmen kívül lesz hagyva.
Example#2 Az oktális számok furcsasága
<?php
var_dump(01090); // 010 octal = 8 decimal
?>
Egészek értelmezési határának túllépése
Az integer típus értelmezési tartományán kívül eső egész értékek float típussá alakulnak. Ha valamely művelet eredménye kívül esik a integer értelmezési tartományán, akkor az eredmény automatikusan float típusúvá konvertálódik.
<?php
$nagy_szam = 2147483647;
var_dump($nagy_szam);
// kimenete: int(2147483647)
$nagyobb_szam = 2147483648;
var_dump($nagyobb_szam);
// kimenete: float(2147483648)
// ez nem működik hexadecimálisan megadott egészekre:
var_dump( 0x100000000 );
// kimenete: int(2147483647)
$millio = 1000000;
$nagy_szam = 50000 * $millio;
var_dump($nagy_szam);
// kimenete: float(50000000000)
?>
Sajnálatosan meg kell említenünk, hogy a PHP 4.0.6-ban ez az átalakítás nem működött mindig pontosan negatív számok használatakor, például: ha a -50000 * $millio műveletet eredménye: -429496728. Ha mindkét operandus pozitív, nincs semmi probléma.
Ezt a hiba ki lett javítva a PHP 4.1.0-ben.
PHP-ben nincs egész osztás. Az 1/2 művelet a 0.5 float (lebegőpontos) értéket eredményezi. Alkalmazhatsz típuskonverziót integer-re lefele kerekítéshez, vagy használhatod a round() függvényt.
<?php
var_dump(25/7); // float(3.5714285714286)
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7)); // float(4)
?>
Egész értékké alakítás
Ha kifejezetten integer típusúvá szeretnél alakítani egy értéket, használd az (int) vagy az (integer) típusátalakítást. A legtöbb esetben azonban nem kell ezt alkalmaznod, mivel az érték automatikusan átalakul, ha egy operátor, függvény, vagy vezérlési szerkezet integer típusú argumentumot vár. Az intval() függvénnyel is alakíthatsz integer-ré.
Lásd még a Bűvészkedés a típusokkal című részt.
Átalakítás boolean (logikai) értékekről
A FALSE (hamis) érték a 0 (nulla) egész számmá alakul, a TRUE (igaz) érték az 1 (egy) egész számot adja.
Átalakítás lebegőpontos értékekről
Lebegépontos számok egész értékké alakításakor a szám tört része elvész, azaz lefelé kerekítés történik.
Ha a lebegőpontos szám az egész tartományon kívül esik (általában +/- 2.15e+9 = 2^31), az eredmény nem definiált, mivel a lebegőpontos szám nem rendelkezik elég precizitással, hogy pontos egész eredményt kapj. Sem warning, sem notice szintű hiba nem lép fel ebben az esetben!
Soha ne alakíts egy ismeretlen törtszámot integer típusúvá, mivel ez időnként nem várt eredményekhez vezethet.
<?php
echo (int) ( (0.1+0.7) * 10 ); // kiírja, hogy 7!
?>
Átalakítás karakterláncokról
Lásd a Stringek átalakítása számmá című részt.
Átalakítás más típusokról
Az egésszé alakítás viselkedése más típusokra nem definiált. Jelenleg ezek az átalakítások megegyeznek azzal, mintha először logikai, majd utána egész értékké alakítottad volna a kiindulási értéket. Erre a viselkedeésre azonban nem szabad építeni, mivel minden figyelmeztetés nélkül megváltozhat.