2011-11-29 9 views
8

mia comprensione è ...is_numeric() vs. is_float() vs. is_int()

se is_numeric($input) === true

allora o

is_float($input) === true O

is_int($input) === true O

$input === 0 O

$input è una stringa numerica (significa che soddisferebbe uno dei primi 3 se non fosse racchiuso tra virgolette).

È preciso? Ci sono altre differenze?

+2

Leggi questo contenuto della tabella: http://php.net/manual/en/language.types.php forse questo è quello che stai cercando .. –

+0

Immagino che ero più confuso su ciò che sono galleggianti. Suppongo che tutto ciò che è un galleggiante sia anche numerico ma non il contrario. – ryanve

risposta

24

Vedi PHP is_numeric. Parla di tutto ciò che è permesso, ed è più di is_float e is_int.


E 'anche importante notare che is_int funziona solo su cose che sono di tipo intero, il che significa rappresentazioni di stringa non sono ammessi. Questo è un problema comune quando si verifica che l'input del modulo sia un numero intero. È necessario utilizzare filter_var o qualcosa della famiglia di filtri con il filtro FILTER_VALIDATE_INT. Per i galleggianti, utilizzare FILTER_VALIDATE_FLOAT.


Inoltre, se il motivo si sta cercando di verificare la presenza di un numero intero è quello di validare un parametro come un int, poi in PHP 7 si può fare questo:

function foo(int $i) { 
    // $i is guaranteed to be an int (is_int) will be true 
} 

PHP 7 ha due diverse modalità per la conversione in int; this answer lo spiega un po 'di più.

Si noti che questo probabilmente non è ciò che si desidera se si sta convalidando il contenuto di un elemento del modulo. Utilizzare la soluzione filter_var per quello.

+0

Thx - buon consiglio su 'filter_var' – ryanve

+0

non hai bisogno di una funzione, puoi lanciarlo su un numero intero:' $ n = (int) $ i' –

2

Vedere docs. Un valore numerico può essere:

  • Un numero intero
  • Un galleggiante
  • esponenziale
  • Un positivo esadecimale
  • Una stringa contenente più di documentazione di questi
+0

Thx // La notazione esponenziale è inclusa nei float. Hai ragione riguardo agli esagoni: sembra che non lo siano e non esiste una funzione is_hex. – ryanve

+0

@ryanve È per PHP, ma normalmente non considererei Exponential (scientifico) un float. – fncomp

Problemi correlati