手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆

PHP细节之&&和and

首页 > PHP >

本文来自冰山上的播客:http://xinsync.xju.edu.cn/index.php/archives/4476
还是值得记录一下,虽然效果一样,但正因为优先级的不同,导致结果可能会和预料中的值有偏差,虽然实际应用中不太用得到但,看看还是好的
原文:

PHP中&&和and都是逻辑运算符,且功能也是完全一样的。如果你不了解它俩的区别,你可能会留下很不容易发现的BUG。仔细看下面的代码片段(注释是执行结果):

<?php
$true = TRUE;
$false = FALSE;
$rt1 = $true && $false;//$rt1:FALSE
$rt2 = $true and $false;//$rt2:TRUE

var_dump($rt1);//FALSE
var_dump($rt2);//TRUE
var_dump($true && $false);//FALSE
var_dump($true and $false);//FALSE

这里最让人感到奇怪的就是为什么$rt1成了FALSE,而$rt2却是TRUE。其实这是PHP优先级在作怪。从文档中我们看到,赋值符号”=”的优先级低于逻辑与符号”&&”,但高于逻辑与符号”and”(也就是&& > = > and)。也就是说:

$rt1 = $true && $false;
$rt2 = $true and $false;

在PHP看来其实是:

$rt1 = ($true && $false);
($rt2 = $true) and $false;

这样就容易解释为什么会有那样的结果了。那现在你知道下面两句的结果了吗?

var_dump($rt1 = $true && $false);
var_dump($rt2 = $true and $false);

参考资料:
PHP Operator Precedence
PHP Logical Operators




本站采用创作共享版权协议, 要求署名、非商业和保持一致. 本站欢迎任何非商业应用的转载, 但须注明出自"易栈网-膘叔", 保留原始链接, 此外还必须标注原文标题和链接.

Tags: php, 语法

« 上一篇 | 下一篇 »

只显示10条记录相关文章

使用PHP得到所有的HTTP请求头 (浏览: 62786, 评论: 3)
我为什么会选用phpstorm (浏览: 52697, 评论: 5)
快速生成目录树 (浏览: 46842, 评论: 7)
通过file_get_contents来Post数据的实例 (浏览: 46407, 评论: 5)
PHP导入导出Excel方法 (浏览: 45230, 评论: 3)
PHP的XSS攻击过滤函数 (浏览: 42729, 评论: 2)
PHP中Eval的作用 (浏览: 41669, 评论: 4)
超详细:在Mac OS X中配置Apache + PHP + MySQL (浏览: 40390, 评论: 1)
PHP常见错误(二) (浏览: 39787, 评论: 1)
PHP sendmail (浏览: 37973, 评论: 7)

1条记录访客评论

很好,支持一个。至少浏览discuz源码时曾被它困惑,问了好几个人才弄明白。
不过我最关心的是它的效率问题。
大叔可以测试下不?

Post by ywisax on 2010, June 15, 11:08 AM 引用此文发表评论 #1


发表评论

评论内容 (必填):