Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有条件运算符“quot;”的PHP语法:&引用;及;或;_Php_Syntax_Operators_Ternary Operator_Conditional Operator - Fatal编程技术网

带有条件运算符“quot;”的PHP语法:&引用;及;或;

带有条件运算符“quot;”的PHP语法:&引用;及;或;,php,syntax,operators,ternary-operator,conditional-operator,Php,Syntax,Operators,Ternary Operator,Conditional Operator,今天,我被下面的人骗了: $asdf = ((1 OR true) ? "asdf" : "fdsa"); var_dump($asdf); // print "asdf" $asdf = (1 OR true) ? "asdf" : "fdsa"; var_dump($asdf); // print "asdf" $asdf = (1 OR true ? "asdf" : "fdsa"); var_dump($asdf); // print true $asdf = 1 OR true

今天,我被下面的人骗了:

$asdf = ((1 OR true) ? "asdf" : "fdsa");
var_dump($asdf); // print "asdf"

$asdf = (1 OR true) ? "asdf" : "fdsa";
var_dump($asdf); // print "asdf"

$asdf = (1 OR true ? "asdf" : "fdsa");
var_dump($asdf); // print true

$asdf = 1 OR true ? "asdf" : "fdsa";
var_dump($asdf); // print 1
好的,最后一个并不让我感到惊讶,但是第三个呢? 有人能解释一下吗?

$asdf=(1或真?“asdf”:“fdsa”)

它等于
(1或(正确?“asdf”:“fdsa”)

它等于
(1或“asdf”)

这等于
true

1或“asdf”不相等(1或“asdf”)。如果不使用括号,则OR运算符后面的语句不再重要。您将第一个元素指定为值。但如果使用括号,第一个元素将是括号中的语句

// use () - result in brackets assigned to $asdf
$asdf = (1 OR true ? "asdf" : "fdsa");
var_dump($asdf); // print true
在这里:

// = has higher precedence so $asfd equals 1 
// and it doesn't matter what is the result of ternary operator
$asdf = 1 OR true ? "asdf" : "fdsa";
// line equals to 
($asdf = 1) OR (true ? "asdf" : "fdsa");
// so $asdf is always 1 here
var_dump($asdf); // print 1

这都是关于运算符优先级及其关联性的

的优先级低于
=
,这就是它将首先执行的原因

所以
$asdf=1还是真的?“asdf”:“fdsa”

会有点像

($asdf=1)或true?:“asdf”:“fdsa”
这就是它将打印1的原因

$a或$b
检查$a或$b是否为真如果$a为真,则返回它,它甚至不去检查$b

第三种情况

$asdf=(1或真?“asdf”:“fdsa”)

()
的优先级高于
=
,因此它将在赋值之前执行

为了证明这一点

将或更改为比
=
具有更高优先级的
|

$asdf = 1 || true ? "asdf" : "fdsa";

var_dump($asdf); // print asdf

Hi,(1或“asdf”)将返回bool(true)。这并不能解释第三个和第四个示例之间的差异。Hi VOVOX,1或“asdf”不相等(1或“asdf”)。如果您使用括号,PHP将返回布尔值,正如您在PHP的“逻辑运算符”页面中所看到的那样。但是为什么不使用括号时它将返回
int
?但是为什么您不在回答中解释它?但是
(1或true?“asdf”:“fdsa”)
如何计算为
true
,而不是
“asdf”
?因为(1或“asdf”)为true:PAh,它将结果强制转换为布尔值。是的,这是一个逻辑表达式。回答得好,但你不认为读者知道
的优先级高于
?感觉您错过了解释的这一部分,其中
$asdf=(1或true?“asdf”:“fdsa”)简化为
$asdf=(1或(真?“asdf”:“fdsa”),因此,
$asdf=1或“asdf”
(如上所述,确实是铸造的)。这是次要的,甚至有点多余,但它可能会帮助那些完全不熟悉这一点的人。(编辑:我对此有些生疏,所以如果我误解了什么,请原谅。编辑#2:我刚刚看到vural的回答解释了这一点。)