逻辑运算符只是将值进行逻辑运算吗?请看以下代码
先上一段我们项目常用代码,这段代码是平常的搜索列表的sql条件生成的一块,这里是使用运算符这样得到我们想要的结果
$map = [];
!isset($filter->name) || $filter->name !== '' && array_push($map, ['name', 'like', "%{$filter->name}%"]);
!isset($filter->full_name) || $filter->full_name !== '' && array_push($map, ['full_name', 'like', "%{$filter->full_name}%"]);
!isset($filter->sale_status) || $filter->sale_status !== '' && array_push($map, ['sale_status', '=', $filter->sale_status]);
一般我们是采用在使用if这样的判断语句 去做最终的结果处理
if (isset($filter->name) && $filter->name !== '') {
array_push($map, ['name', 'like', "%{$filter->name}%"]);
}
下面我再列个简单案例说明一下
$a = 1;
$b = 2;
$c = 0;
$c == 0 && $c = $a + $b;
echo $c; //3
$c = 0;
$c == 0 || $c = $a + $b;
echo $c; //0
原理分析
-
首先我们要知道php的运算是从左到右去进行
-
这个运算符的运行规则也需要熟悉,就是下表的运算判断需要熟悉不然很容易出问题
-
注意:逻辑表达式可以是一个表达式、函数,但不能是语句组合或输出语句
运算符 | 名称 | 描述 | 实例 |
---|---|---|---|
x and y | 与 | 如果 x 和 y 都为 true,则返回 true | x=6 y=3 (x < 10 and y > 1) 返回 true |
x or y | 或 | 如果 x 和 y 至少有一个为 true,则返回 true | x=6 y=3 (x==6 or y==5) 返回 true |
x xor y | 异或 | 如果 x 和 y 有且仅有一个为 true,则返回 true | x=6 y=3 (x==6 xor y==3) 返回 false |
x && y | 与 | 如果 x 和 y 都为 true,则返回 true | x=6 y=3 (x < 10 && y > 1) 返回 true |
x || y | 或 | 如果 x 和 y 至少有一个为 true,则返回 true | x=6 y=3 (x==5 || y==5) 返回 false |
! x | 非 | 如果 x 不为 true,则返回 true | x=6 y=3 !(x==y) 返回 true |
总结
上面的例子当然可以通过条件判断语句来实现,现在的情况一 个是减少了代码的量,最主要的是增加了程序的执行效率。掌握这一点的关键就是表达式的运行方向,是从左到右。主要其实还是基础要打好,怎么浪都不怕,掌握好这些运算符规则后,回头看文章头部的案例应该就可以轻易看懂了