Un int è un numero che appartiene all'insieme ℤ = {..., -2, -1, 0, 1, 2, ...}.
Vedere anche:
Gli int possono essere specificati nella notazione decimale (base 10), esadecimale (base 16), ottale (base 8) o binaria (base 2). L'operatore di negazione può essere utilizzato per indicare un int negativo.
Per usare la notazione ottale, anteporre uno 0
(zero) al numero.
Per usare la notazione esadecimale, anteporre 0x
.
Per usare la notazione binaria, anteporre 0b
.
A partire da PHP 7.4.0, gli interi letterali possono contenere trattini bassi (_
) tra le cifre,
per una migliore leggibilità dei letterali. Questi trattini bassi vengono rimossi dallo scanner di PHP.
Example #1 Interi letterali
<?php
$a = 1234; // numero decimale
$a = 0123; // numero ottale (equivalente a 83 decimale)
$a = 0x1A; // numero esadecimale (equivalente a 26 decimale)
$a = 0b11111111; // binary number (equivalent to 255 decimal)
$a = 1_234_567; // decimal number (a partire da PHP 7.4.0)
?>
Formalmente, la struttura per gli int letterali è a partire da PHP 7.4.0 (in precedenza, i trattini bassi non erano consentiti):
decimal : [1-9][0-9]*(_[0-9]+)* | 0 hexadecimal : 0[xX][0-9a-fA-F]+(_[0-9a-fA-F]+)* octal : 0[0-7]+(_[0-7]+)* binary : 0[bB][01]+(_[01]+)* integer : decimal | hexadecimal | octal | binary
La dimensione di un int dipende dalla piattaforma, anche se il valore massimo tipico
è di circa due miliardi (corrispondente a 32 bit col segno).
Le piattaforme a 64 bit hanno normalmente un valore massimo di circa 9E18.
PHP non supporta gli int senza segno.
La dimensione di un int può essere determinata
usando la costante PHP_INT_SIZE
, il valore massimo usando
la costante PHP_INT_MAX
,
ed il valore minimo usando la costante PHP_INT_MIN
.
Se PHP incontra un numero oltre i limiti del tipo int, questo verrà interpretato con un float. Allo stesso modo, un'operazione che restituisce un numero oltre i limiti del tipo int restituirà invece un float.
Example #2 Overflow di interi in un sistema a 32 bit
<?php
$large_number = 2147483647;
var_dump($large_number); // int(2147483647)
$large_number = 2147483648;
var_dump($large_number); // float(2147483648)
$million = 1000000;
$large_number = 50000 * $million;
var_dump($large_number); // float(50000000000)
?>
Example #3 Overflow di interi in un sistema a 64 bit
<?php
$large_number = 9223372036854775807;
var_dump($large_number); // int(9223372036854775807)
$large_number = 9223372036854775808;
var_dump($large_number); // float(9.2233720368548E+18)
$million = 1000000;
$large_number = 50000000000000 * $million;
var_dump($large_number); // float(5.0E+19)
?>
Non esiste un operatore di divisione int in PHP, per ottenere ciò
utilizzare la funzione intdiv().
1/2
produce il float 0.5
.
Il valore può essere convertito in un int per arrotondarlo verso lo zero, oppure
la funzione round() fornisce un controllo più preciso sull'arrotondamento.
<?php
var_dump(25/7); // float(3.5714285714286)
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7)); // float(4)
?>
Per convertire esplicitamente un valore in int, usare o
(int)
oppure (integer)
. Comunque, nella
maggior parte dei case questo non è necessario, in quanto un valore verrà automaticamente
convertito se un operatore, fuinzione o struttura di controllo richiede un
argomento int. Un valore può essere convertito in
int anche con la funzione intval().
Se un resource è convertito in int, allora il risultato sarà il numero unico di risorsa assegnato al resource da PHP a runtime.
Vedere anche: manipolazione dei tipi.
Quando si converte da float a int, il numero verrà arrotondato towards zero.
Se il float è oltre i limiti di int (di solito
+/- 2.15e+9 = 2^31
sulle piattaforme 32-bit e
+/- 9.22e+18 = 2^63
sulle piattaforme 64-bit),
il risultato non è definito, dal momento che float non
ha abbastanza precisione per dare un risultato int esatto.
Nessun allarme, neanche un avvertimento viene generato quando questo avviene!
Nota:
NaN e Infinity saranno sempre zero quando convertiti in int.
Non effettuare mai un cast di una frazione sconosciuta a int, dal momento che questo a volte può portare a risultati inattesi.
<?php
echo (int) ( (0.1+0.7) * 10 ); // stampa 7!
?>
Vedere anche l'avvertimento a proposito della precisione dei float.
Se la stringa è
numerica
o inizia con numeri allora verrà risolta nel
valore intero corrispondente, altrimenti verrà convertita a zero
(0
).
Il comportamento della conversione a int non è definito per gli altri tipi. Non fare affidamento a alcun comportamento osservato, dal momento che questo può cambiare senza preavviso.