关于PHP运算符的一点疑惑

WBOY
发布: 2016-06-23 13:32:43
原创
913 人浏览过

我在手册上看见的是 

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

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!