php 三元运算符和字符串连接的怪癖?

3hvapo4f  于 2023-02-07  发布在  PHP
关注(0)|答案(3)|浏览(108)

嗨,我只是想知道为什么这个代码产生(至少对我来说)一个不正确的结果。
好吧也许是我的错

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

我猜如果paperType等于“Bond”,则说明为“Paper:如果paperType不等于“Bond”,则说明为“纸张:其他人。
但是当我运行这段代码时,结果是描述要么是“邦德”要么是“其他”,这让我想知道字符串“纸:”“走了?

nimxete2

nimxete21#

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

尝试添加括号,以便字符串按正确顺序连接到另一个字符串。

falq053o

falq053o2#

与操作符优先级有关,需要做以下几点:

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

q0qdq0h23#

我想大家都给出了解决方案,我想贡献一下这个意外结果的原因。
首先,您可以检查原点以及运算符的求值方式(左、右、关联等)。
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';

1.现在我们有了三元运算符,我们知道字符串的值为“true”
// php documentation当转换为布尔值时,下列值 被视为错误:
...空字符串和字符串“0”

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

1.终于

$description = 'bond';

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

相关问题