Assegnamento vs. Confronto
-
Categoria: PHP
-
Pubblicato Martedì, 03 Settembre 2013
-
Scritto da Paolo Scolamacchia
Domanda a bruciapelo: qual é la lettera che viene stampata dal seguente codice
Php?
$z = 0;
$x = 13453;
$y = $x;
if($x > $y) echo "A";
else if($z = 1) echo "B";
else echo "C";
All'occhio attento non sfugge il senso di questa domanda, che é il seguente.
Dentro alla parentesi della riga 5 ci dovrebbe essere un
operatore di confronto, che in Php é realizzato dall'operatore '==' (due segni di 'uguale' consecutivi).
Però può capitare, per sbaglio, di scrivere un solo segno di uguale, come nell'esempio.
Ma in Php, l'operatore '=' (un solo segno di uguale) é quello usato per l'
assegnamento.Così si avrà che:
- l'operazione dentro alla parentesi della riga 5 é l'assegnamento del valore costante 1 alla variabile $z, e non il confronto tra la variabile $z e la costante 1 (uno), come si sarebbe voluto.
- l'esito dell'istruzione if alla riga 5 sarà vero, perché l'esito dell'assegnamento di una variabile é sempre vero.
Il suggerimento che si propone é quello di abituarsi a scrivere il valore numerico prima, poi l'operatore di confronto (==) e infine la variabile, così nell'esempio ci sarebbe stato:
else if(1 == $z) echo "B";
Se poi nella fretta, ci fosse sfuggito un segno di uguale, così da scrivere:
else if(1 = $z) echo "B";
allora tale scrittura sarebbe stata segnalata come errore dal Php, con il seguente messaggio:
PHP Parse error: syntax error, unexpected '='
In situazioni di codice più complesso, e di tempi stretti, anche
un semplice accorgimento come questo può essere di una certa
utilità.
You have no rights to post comments