2016-02-02 7 views
5

Stavo scrivendo un piccolo programma quando ho incontrato qualcosa di strano. Se volessi che PHP presentasse un'operazione aritmetica di addizione o sottrazione con un'istruzione echo e il risultato dell'operazione dovessi aggiungere parentesi o la pagina html non avrebbe presentato l'operazione ma solo il risultato.Perché è necessario aggiungere parentesi alle operazioni + - quando si concatenano?

Di seguito è riportato un esempio ridotto.

primo caso (senza parentesi):

$a = 10; 
$b = 5; 
echo "$a + $b = ".$a + $b."<br>"; // 15 
echo "$a - $b = ".$a - $b."<br>"; // 5 
echo "$a * $b = ".$a * $b."<br>"; // 10 * 5 = 50 
echo "$a/$b = ".$a/$b."<br>"; // 10/5 = 2 
echo "$a % $b = ".$a % $b."<br>"; // 10 % 5 = 0 

secondo caso (con le parentesi):

$a = 10; 
$b = 5; 
echo "$a + $b = ".($a + $b)."<br>"; // 10 + 5 = 15 
echo "$a - $b = ".($a - $b)."<br>"; // 10 - 5 = 5 
echo "$a * $b = ".($a * $b)."<br>"; // 10 * 5 = 50 
echo "$a/$b = ".($a/$b)."<br>"; // 10/5 = 2 
echo "$a % $b = ".($a % $b)."<br>"; // 10 % 5 = 0 

Qualcuno potrebbe spiegare perché questo sta accadendo?

+3

In due parole, [ "__Operator Precedence__"] (http: //www.php. net/manual/it/language.operators.precedence.php) –

+1

@MarkBaker Ci dispiace, anche se la precedenza degli operatori gioca certamente un ruolo in questo caso, non è chiaro il motivo per cui l'OP ottiene l'output descrittivo. Ho controllato e ottenuto lo stesso risultato. Dal momento che apparentemente sai cosa sta succedendo, ti dispiacerebbe elaborare il tuo commento? Grazie! – arkascha

+0

Un suggerimento specifico sull'uso di "echo". Non concatenare! Usa invece ','. Per esempio. "echo" $ a + $ b = ", $ a + $ b,"
";" Non incontrerai mai più questi problemi. – Yoshi

risposta

4

da link da Mark Baker si può vedere che

addizione, sottrazione, e concatenazione di stringhe hanno uguale precedenza!

in echo "$a + $b = ".$a + $b."<br>"; //15

Concatenate la prima stringa letterale e il valore di $a, poi convertire implicitamente che ad un certo numero (10) in modo da poter aggiungere $b ad esso, quindi concatenare la stringa finale letterale.

quando si mette tra parentesi, l'aggiunta viene trattato come il numero (15) quindi nessun operazioni matematiche con stringa

+0

che ha senso grazie :) – Tim8288

+0

Quindi la risposta alla domanda degli OP è: "una conversione di tipo implicita da stringa a numerico viene eseguita prima di valutare il' + ' – arkascha

+0

Qual è qualcosa che ancora non capisco Come dovrebbe essere una conversione di tipo "10 + 5 = 10" in una lavorazione numerica? – arkascha