不言不语

您现在的位置是: 首页 >  数据库  >  MYSQL

MYSQL

php中or与||, and与&&的区别总结

2022-05-31MYSQL
在PHP中,&&与and都表示逻辑与,||与or都表示逻辑或,并且它们都是短路运算符。而它们的区别在于运算的优先级不同

对于&&和and,||和or,  本身没有区别,只是使用习惯问题 ,但是有时候牵涉到运算符优先级的问题,结果会不同,记录下。例如:


<?php

$p = 6 or 0;
var_dump($p); //int(6)

$p = 6 || 0;
var_dump($p); //bool(true)

$p = 6 and 0;
var_dump($p); //int(6)

$p = 6 && 0;
var_dump($p); //bool(false)



因为赋值运算的优先级比and和or的高,所以先赋值;比&&和||的低,所以逻辑运算符先执行,先逻辑运算,再赋值。


在PHP中,&&与and都表示逻辑与,||与or都表示逻辑或,并且它们都是短路运算符。而它们的区别在于运算的优先级不同。

<?php

$t1=true and false; // bool(true)
$t2=true && false;  // bool(false)
var_dump($t1,$t2);


在上面的代码中$t1的值为true,$t2的值为false。因为运算符and、=、&&的优先级为&&>=>and,所以在执行第一行时,会先将true赋值给t1,false被忽略。而第二行代码会先进行&&运算,然后将运算的结果false,赋值给t2。

同样对于||和or。运算符or、=、||的优先级为||>=>or。下面代码运行后,$t1的值为false,$2的值为true。

<?php

$t1=false or true;  // bool(false)
$t2=false || true;  // bool(true)
var_dump($t1,$t2);



运算符的优先级


通过这个表, 我们可以看到 and/&& 和 or/|| 这两组运算符的优先级竟然是不一样的. and和or的优先级是低于=的, 所以上面的代码就好理解了, 就是先做赋值然后再做了一个and或or的逻辑运算

1709571-b9321832fdfc5f97.jpg

文章评论