PHP细节之&&和and

DATE: 2016-01-21 / VIEWS: 786

本文来自冰山上的播客:http://xinsync.xju.edu.cn/index.php/archives/4476

还是值得记录一下,虽然效果一样,但正因为优先级的不同,导致结果可能会和预料中的值有偏差,虽然实际应用中不太用得到但,看看还是好的

原文:

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

  1. <?php
  2. $true = TRUE;
  3. $false = FALSE;
  4. $rt1 = $true && $false;//$rt1:FALSE
  5. $rt2 = $true and $false;//$rt2:TRUE
  6. var_dump($rt1);//FALSE
  7. var_dump($rt2);//TRUE
  8. var_dump($true && $false);//FALSE
  9. var_dump($true and $false);//FALSE

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

  1. $rt1 = $true && $false;
  2. $rt2 = $true and $false;

在PHP看来其实是:

  1. $rt1 = ($true && $false);
  2. ($rt2 = $true) and $false;

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

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