关于PHP运算符的一点疑惑
&& 与 $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 "发布成功";
}
逻辑上两个就不同了,不明白为什么楼主觉得有问题呢,这些是按需求来做的吧。