今天再读 php 文档,看到逻辑运算符这边又发现了新天地呀,

之前在探究 c 语言的逻辑运算符中,我们得到了一些结论

而在 php 中,&& ||与 and or 同时存在,并且表示的含义是一样,但是不同的是优先级

接下来复制官方文档的一个实例

<?php

// --------------------
// foo() 根本没机会被调用,被运算符“短路”了

$a = (false && foo());
$b = (true  || foo());
$c = (false and foo());
$d = (true  or  foo());

// --------------------
// "||" 比 "or" 的优先级高

// 表达式 (false || true) 的结果被赋给 $e
// 等同于:($e = (false || true))
$e = false || true;

// 常量 false 被赋给 $f,true 被忽略
// 等同于:(($f = false) or true)
$f = false or true;

var_dump($e, $f);

// --------------------
// "&&" 比 "and" 的优先级高

// 表达式 (true && false) 的结果被赋给 $g
// 等同于:($g = (true && false))
$g = true && false;

// 常量 true 被赋给 $h,false 被忽略
// 等同于:(($h = true) and false)
$h = true and false;

var_dump($g, $h);
?>
bool(true)
bool(false)
bool(false)
bool(true)

简单的来说,优先级 "||" > '='> "or" "&&" > '='> "and"

但是无论如何 php 与 c 一样,并没有 js 般的逻辑运算符作用

and or 与=共存时,只获取 and 和 or 的前面的值,可能用 true 和 fasle 还不够形象 接下来我们用具体的值,就取数字来研究

$a = 2 && 3;//$a = 2 && 3; 同
echo $a;

答案是:

1,而不是 3,如果是 js 来说是 3,1 就是 true!

那么你就会问了,那 and 和 or ,前面我们说它跟等号一起,实际就会截取 and 和 or 前面地值 $c = 2 and 3; echo $c; //2 $d = 2 or 3; echo $d;//2

因此这种形式下往往用来混淆加密,and 和 or 只是减弱了代码地可读性,论如何写出他人维护不了的代码 --

好,如果你觉得脑子还没有乱的话,继续接着看

那么如果没有等号,and 和 or ,&& ,||又怎么样呢? #

echo 2 && 3;
echo 2 || 3;
echo 2 and 3;
echo 2 or 3;

结果都是 1,也就是说:

&& 和 ||作用不言而喻,就是没有 js 那样的作用,and 和 or 也是,但是没有等号的存在,and 和 or 就要比较下两边的 bool 了(同样,非 0 为真

总结,看完了文章,你只要记住 #

  1. 没有 js 那样的作用
  2. 有等号在的 and or 就取 and 和 or 前面的值
  3. && 和 || 与没有等号的 and or 一样,返回 true 还是 false

增加 #

$stmt = false or die ("Failed to prepared the statement!");

这种情况会输出 Failed to prepared the statement!

这是为什么呢?

这是 die 的作用,看到 false,就输出证明死了