operatore ternario e concatenazione di stringhe capriccio?
-
19-09-2019 - |
Domanda
Ciao Voglio solo sapere perché questo produce codice (almeno per me) un risultato errato.
Beh, probabilmente io sono in colpa qui
$description = 'Paper: ' . ($paperType == 'bond') ? 'Bond' : 'Other';
Mi è stato indovinando che se PaperType è uguale a 'James Bond' allora descrizione è 'Paper: James Bond' e se PaperType non è uguale a 'James Bond' allora descrizione è 'Paper: Altro'.
Ma quando ho eseguito questo codice i risultati sono descrizione è o 'James Bond' o 'Altro' e mi ha lasciato chiedendo dove la stringa 'Paper:' andato ???
Soluzione
$description = 'Paper: ' . ($paperType == 'bond' ? 'Bond' : 'Other');
Prova ad aggiungere parentesi in modo che la stringa è concatenato ad una stringa nel giusto ordine.
Altri suggerimenti
Si è in relazione con precedenza degli operatori. È necessario effettuare le seguenti operazioni:
$description = 'Paper: ' . (($paperType == 'bond') ? 'Bond' : 'Other');
Credo che tutti ha dato la soluzione, vorrei contribuire la ragione del risultato inaspettato.
Prima di tutto qui è possibile verificare l'origine, e in che modo vengono valutati gli operatori (sinistra, destra, associativo, ecc).
http://php.net/manual/fa/language.operators .precedence.php
Ora, se analizziamo la vostra frase.
$ paperType = 'bond';
$ description = 'Paper:'. ($ paperType == 'bond')? 'Bond': 'Other';
1) Esaminiamo la tavola e scopriamo che le parentesi vengono valutate per prime, poi la '' (Concatenamento) viene valutato e alla fine l'operatore ternario, pertanto si potrebbe associare questo come segue '?':
// evaluate the parenthesis ... ($ paperType == 'bond')
$ description = ('Paper:'. 1)? 'Bond': 'Other';
//result
$ description = 'Paper: 1'? 'Bond': 'Other';
2) Ora abbiamo l'operatore ternario, sappiamo che una stringa viene valutata "true"
// documentazione di PHP Durante la conversione in booleano, i seguenti valori sono considerati FALSE:
... la stringa vuota, e la stringa "0"
$ description = true? 'Bond': 'Other';
3) Infine
$ description = 'bond';
Spero di aver chiarito la questione. Saluti.