Sommare "testi" in DB
Pagine → 1 2
18/03/2014 12:12:38
Hmm, devo capire bene questa storia dei ==/=== e sorpattutto degli !empty...
Cmq funziona e ti ringrazio :-)
18/03/2014 12:50:19 e modificato da darkabe il 18/03/2014 12:51:16
sgc carter ha scritto: Hmm, devo capire bene questa storia dei ==/=== e sorpattutto degli !empty...
Cmq funziona e ti ringrazio :-)
È molto semplice in realtà, basta solo capire quali sono i modi in cui PHP potrebbe interpretare un input. Faccio un esempio chiarificatore:
$test = 0;
Lo zero inserito dentro $test è un intero, ma può essere interpretato in vari modi in base all'espressione di controllo che utilizzi. Ad esempio
if( $test == 0 ) // true
if( $test == "0" ) // true
if( $test == false ) // true
if( !$test ) // true
Come puoi ben vedere nel primo caso confrontiamo $test con un intero dal valore 0. Nel secondo con la stringa 0. Nel terzo con il booleano false. Il quarto è sostanzialmente la stessa cosa del terzo.
Perché il risultato è sempre true? Perché PHP fa delle conversioni di tipo, ovvero converte il suo dato cercando di adattarsi al tipo che tu gli stai dando come controllo. Quindi nell'esempio
if( $test == "0" ) // true
Lui converte $test (intero) in una stringa, per poi confrontarlo con la stringa 0. In pratica parte così
0 == "0"
e lo trasforma così
"0" == "0"
dove ovviamente il risultato è true.
Come fare ad evitare questo comportamento? Semplicemente usando === invece di ==, così vincoli PHP a controllare senza effettuare conversioni di alcun tipo. Riprendendo gli esempi di prima il risultato è:
if( $test === 0 ) // true
if( $test === "0" ) // false
if( $test === false ) // false
if( !$test ) // true (perché l'uguaglianza è ancora in formato "semplice")
Mentre per la funzione empty, documentazione rulez http://it1.php.net/empty ↗
Returns FALSE if var exists and has a non-empty, non-zero value. Otherwise returns TRUE.
The following things are considered to be empty:
"" (an empty string)
0 (0 as an integer)
0.0 (0 as a float)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
$var; (a variable declared, but without a value)
18/03/2014 14:17:03
Ottima spiegazione.
Grazie mille :-)
Discussione seguita da
Pagine → 1 2
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Cafuné ↗
CRSED: F.O.A.D. ↗
Neverness to Everness ↗