欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

关于PHP运算符的一点疑惑

程序员文章站 2022-04-06 18:17:19
...
我在手册上看见的是

&&	与	$x && $y	如果 $x 和 $y 都为 true,则返回 true。||	或	$x || $y	如果 $x 和 $y 至少有一个为 true,则返回 true。


但是为什么我常常看好多的php文件 包括知名的开源程序的 都是用的反的??

比如删除某个信息的条件判断代码 都是

是管理员 && 是发布者 这样的格式?从手册上来讲 这样的含义是 删除信息的条件既是管理员又是发布者


真搞不懂 怎么回事 难道手册上有误?


回复讨论(解决方案)

你怎么知道你不是断章取义了呢

逻辑运算符的 用法 手册上没什么问题呢.

至于你举得例子 你确定是你说的意思吗?

你要举例说你在哪里看到了,粘帖代码让大家看一下

你要举例说你在哪里看到了,粘帖代码让大家看一下



比如知名开源论坛 discuz 的一个文件

if(!defined('IN_DISCUZ') || !defined('IN_ADMINCP')) {	exit('Access Denied');}


很明显 意思就是必须在discuz内部 并且还要在admin管理 页面才能运行。

大家不信的话 可以在discuz 里面看看相关的php文件 大跌眼镜

php不会有自定义运算符的功能吧

应该不会有反着用的~

又比如 我要判断2个表单是否都填写

if(empty($_POST['a']) || empty($_POST['b'])){


这样才能是2个表单缺一不可,都则不能发布
用php手册上的
if(empty($_POST['a']) && empty($_POST['b'])){

只要填写1项 就可以发布了
已亲测!

对不起 上面掉了个括号 呵呵 大家明白这个意思就行了

又比如 我要判断2个表单是否都填写

if(empty($_POST['a']) || empty($_POST['b'])){


这样才能是2个表单缺一不可,都则不能发布
用php手册上的
if(empty($_POST['a']) && empty($_POST['b'])){

只要填写1项 就可以发布了
已亲测!

你下面的代码都没写全,我们怎么知道是不是反的?
况且你怎么确定原来作者的思路不是这样的?

if(empty($_POST['a']) || empty($_POST['b']))
表述的是只要 $_POST['a'] 和 $_POST['b'] 中有一个为空(当然包括两个都为空)表达式就成立

if(empty($_POST['a']) && empty($_POST['b']))
表述的是有 $_POST['a'] 和 $_POST['b'] 两个都为空,表达式才成立

显然两者是不同的,虽然都有 两个都为空 的表述
你得根据你的业务需要选择符合要求的表达式


又比如 我要判断2个表单是否都填写

if(empty($_POST['a']) || empty($_POST['b'])){


这样才能是2个表单缺一不可,都则不能发布
用php手册上的
if(empty($_POST['a']) && empty($_POST['b'])){

只要填写1项 就可以发布了
已亲测!

你下面的代码都没写全,我们怎么知道是不是反的?
况且你怎么确定原来作者的思路不是这样的?


真服了你们了 我意思就是

if(empty($_POST['a'])) || empty($_POST['b'])){    echo "对不起 表格填写不全";}else{   echo "发布成功";}

这种类型的代码 在discuz中 被认为是 a表单和b表单 必须全部填写才能发布


if(empty($_POST['a'])) && empty($_POST['b'])){    echo "对不起 表格填写不全";}else{   echo "发布成功";}

则认为是 至少填写1个 就可以发布了

我也感觉奇怪 所以讨论的 。。。。。。。

你自己的逻辑问题:你认为 c=a&&b; 与 !a或!b =c 相等?

if(!defined('IN_DISCUZ') || !defined('IN_ADMINCP')) {
exit('Access Denied');
}


意思是只要其中一个不满足就退出,判断的范围要宽一些,如 桌子是四方的->桌子是四方桌,
而 或 则可以看成是:不是四方的或不是桌子不满足四方桌。个人认为或用来判断更有效率。

这个是表示,a为空或b为空都显示表格填写不全
if(empty($_POST['a'])) || empty($_POST['b'])){
echo "对不起 表格填写不全";
}else{
echo "发布成功";
}

这个是表示 a和b同时为空才显示表格填写不全
if(empty($_POST['a'])) && empty($_POST['b'])){
echo "对不起 表格填写不全";
}else{
echo "发布成功";
}

逻辑上两个就不同了,不明白为什么楼主觉得有问题呢,这些是按需求来做的吧。