Pergunta

Oi eu só quero saber por que isso rendimentos código (pelo menos para mim) um resultado incorreto.

Bem, provavelmente eu estou em falta aqui

$description = 'Paper: ' . ($paperType == 'bond') ? 'Bond' : 'Other';

Eu estava adivinhando que, se PaperType é igual a 'Bond', em seguida, a descrição é 'Papel: Bond' e se PaperType não é igual a 'Bond', em seguida, a descrição é 'Papel: Outro'.

Mas quando eu executar esse código, os resultados são descrição é 'Bond' ou 'Outro' e me deixou perguntando onde a string 'Papel:' fui ???

Foi útil?

Solução

$description = 'Paper: ' . ($paperType == 'bond' ? 'Bond' : 'Other');

Tente adicionar parênteses para que a string é concatenado com uma corda na ordem correta.

Outras dicas

Ela está relacionada com a precedência do operador. Você tem que fazer o seguinte:

$description = 'Paper: ' . (($paperType == 'bond') ? 'Bond' : 'Other');

Eu acho que todo mundo deu a solução, eu gostaria de contribuir a razão para o resultado inesperado.

Antes de tudo aqui você pode conferir a origem, e como os operadores são avaliados (esquerda, direita, associativa, etc).

http://php.net/manual/fa/language.operators .precedence.php

Agora, se analisarmos sua sentença.

$ paperType = 'bond';
$ description = 'Paper:'. ($ paperType == 'bond')? 'Bond': 'Other';

1) Revisamos a tabela e achar que os parênteses são avaliadas primeiro, então o '' (Concatenação) é avaliada e no final o operador ternário, portanto, poderíamos associar isso da seguinte forma '?':

// evaluate the parenthesis ... ($ paperType == 'bond')
$ description = ('Paper:'. 1)? 'Bond': 'Other';
//result
$ description = 'Paper: 1'? 'Bond': 'Other';

2) Temos agora o operador ternário, sabemos que uma string é avaliada "true"

// documentação php Quando convertendo para booleano, os seguintes valores são considerados FALSE:

... a cadeia vazia, e a string "0"

$ description = true? 'Bond': 'Other';

3) Finalmente

$ description = 'bond';

Espero ter esclarecido a questão. Saudações.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top