61

嗨,我只想知道为什么这段代码会产生(至少对我而言)不正确的结果。

好吧,可能我在这里有错

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

我猜如果 paperType 等于 'Bond' 那么描述是 'Paper: Bond' 如果 paperType 不等于 'Bond' 那么描述是 'Paper: Other'。

但是当我运行这段代码时,结果是描述要么是'Bond'要么是'Other',让我想知道字符串'Paper:'去了哪里???

4

3 回答 3

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

尝试添加括号,以便将字符串以正确的顺序连接到字符串。

于 2009-08-23T00:07:09.730 回答
13

它与运算符优先级有关。您必须执行以下操作:

$description = 'Paper: ' . (($paperType == 'bond') ? 'Bond' : 'Other');
于 2009-08-23T00:08:26.653 回答
5

我想每个人都给出了解决方案,我想贡献出意外结果的原因。

首先,您可以在这里检查原点,以及如何评估运算符(左、右、关联等)。

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

现在,如果我们分析你的句子。

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

1)我们查看表格,发现括号首先被评估,然后是“。” (连接)被评估,最后是三元运算符'?',因此我们可以将其关联如下:

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

2)我们现在有了三元运算符,我们知道一个字符串被评估为“真”

// php文档 转换为布尔值时,以下值被认为是FALSE:

...空字符串和字符串“0”

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

3) 最后

$ description = 'bond';

我希望我已经澄清了这个问题。问候。

于 2018-05-18T06:04:18.347 回答