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 ???

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top