PHP速记逻辑运算符和或
可能的重复项:PHP速记逻辑运算符和或,php,logical-operators,Php,Logical Operators,可能的重复项: 快速提问。我一直在各地的库中看到速记表达式,尽管我已经做了3年多的PHP开发人员,但我还是很难理解下面的内容将如何评估 当PHP解释器遇到以下代码行时,它会对这些代码行做什么 <?php defined('foo') OR exit('foo is not defined!'); $foo AND $this->bar(); 我认为这是短路评估的一种形式: 本质上,当计算整个表达式时,一旦确定结果,解释器就会短路。例如: true OR do_
快速提问。我一直在各地的库中看到速记表达式,尽管我已经做了3年多的PHP开发人员,但我还是很难理解下面的内容将如何评估 当PHP解释器遇到以下代码行时,它会对这些代码行做什么
<?php
defined('foo') OR exit('foo is not defined!');
$foo AND $this->bar();
我认为这是短路评估的一种形式:
本质上,当计算整个表达式时,一旦确定结果,解释器就会短路。例如:
true OR do_something();
if (a == b && b == c)
此表达式从不调用do_something(),因为OR的第一个操作数为true,因此整个表达式必须为true。比您想象的要简单得多。或
关键字与|
相同,只是优先级较低。有关详细信息,请参阅
该语句的实际执行依赖于一个涉及逻辑运算符的单独概念:短路。这意味着,在或的情况下,如果第一条语句为真,则不计算第二条语句。(例如,在条件中,整个条件将返回true,而无需查看后半部分。)有时您的函数类似于:
function test()
{
$foo = TRUE;
$bar = FALSE;
return $foo && $bar;
}
在这种情况下,如果有人这样做:
$bla = test();
if($bla) {
... do something
}
“…do something”将不会执行,因为函数作为一个整体返回false
return$foo&&$bar意味着两个变量都必须为true才能使函数返回true
另一方面,如果声明:return$foo | |$bar;然后函数将返回true,因为至少有一个变量为true。在我学习PHP时,我记得读过'do or die'样式的命令,但当时没有完全理解它们,典型的例子是:
mysql_connect() or die('couldn\'t connect');
请记住,这些条件只有在需要时才会运行,例如:
true OR do_something();
if (a == b && b == c)
这里,只有当a==b时,才会测试b==c。同样的理论适用于或:
if (a == b || b == c)
现在b==c只在a!=b
在这种情况下,在某些情况下,您依赖此命令来运行命令(exit或$this->bar()
<强> > <强> Ext()在这种情况下是一个坏主意——如果您退出(“出错”),任何人都无能为力地将这个错误隐藏给用户,它也可能发出一个200 OK HTTP状态,其中500个内部服务器错误会更合适,我会考虑更类似的:
defined('foo') OR throw new Exception('foo is not defined!');
在这里,您有机会捕获异常,或者至少让PHP捕获它并发出500状态
Mat@Gordon-不,不太可能。我知道&&和is是一样的,和| |和OR也是一样的。我在询问速记逻辑——现在已经被指出是短路评估。那么,怎么样?有人刚刚把我和这个联系起来。你的问题到底是什么?我只是指出可能的重复。顺便说一句,用那个链接回答的人不应该用那个链接回答。这应该是一个评论或投票。这就是为什么我把它复制到这里,并标记他的答案不是答案。这都是家务。嘿,马特,谢谢你的回答。是的,我知道这根本不是最好的方式。实际上,我只是从CodeIgniter核心的大多数文件中提取了这个示例。。。这是一个高度面向PHP4的框架。