首頁 >後端開發 >php教程 >关于PHP运算符的一点疑惑

关于PHP运算符的一点疑惑

WBOY
WBOY原創
2016-06-23 13:32:43953瀏覽

我在手册上看见的是 

&&	与	$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 "发布成功";
}

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn