通过PHP中的AND运算符进行短路评估

时间:2011-10-05 17:17:43

标签: php and-operator

我正在努力提高我的编码忍者h4x技能,我目前正在寻找不同的框架,我找到了很难谷歌的示例代码。

我正在查看项目中使用的FUEL framework

我不明白的样本是

$data and $this->template->set_global($data);

这行代码中的关键字是什么?它被用在框架中的许多地方,它是我发现的第一个使用它的地方。

5 个答案:

答案 0 :(得分:13)

这是一种“short circuit evaluation”。 and/&&表示比较的两边必须评估为TRUE

and/&&左侧的项目评估为TRUE/FALSE,如果TRUE,则执行并评估右侧的项目。如果左项为FALSE,则执行暂停,不评估右侧。

$data = FALSE;
// $this->template->set_global($data) doesn't get evaluated!
$data and $this->template->set_global($data);

$data = TRUE;
// $this->template->set_global($data) gets evaluated
$data and $this->template->set_global($data);

请注意,这些不必是实际的布尔值TRUE/FALSE,但根据PHP的评估规则,也可以是truthy / falsy值。有关评估规则的详细信息,请参阅PHP boolean docs

答案 1 :(得分:4)

当你使用逻辑运算符时,操作数(左边的值和右边的值)被计算为布尔值,所以基本上代码将以更短的方式执行此操作:

$o1 = (Bool)$data; // cast to bool
if($o1)
    $o2 = (Bool)$this->template->set_global($data); // cast to bool

编辑:

其他一些信息:

$a = 33;
isset($a) && print($a) || print("not set");
echo "<br>";
isset($a) AND print($a) OR print("not set");
echo "<br>";

尝试发表评论/解除评论$a = 33;。这是&&AND之间的差异,||OR之间的差异(print返回true,转换为字符串时会转换为“1”)

答案 2 :(得分:2)

这是一个有效的陈述,其作用如下:

  

如果$ data有效(不是',0或NULL),则运行$ this-&gt; template-&gt; set_global($ data)

这是一种快速说法:

if ($data)
{
    $this->template->set_global($data);
}

顺便说一句,您也可以使用&&代替and

答案 3 :(得分:0)

PHP支持&&and用于逻辑AND操作,它们通常工作相同,除了and的运算符优先级略低于&&:{{ 3}}

答案 4 :(得分:-2)

它是boolean operator,这意味着它需要两个操作数并返回一个布尔值 - truefalse。如果两个操作数都计算为true(除了并且在PHP中为空字符串,零或空),它将返回true,否则结果将为false

这是关于and运算符的PHP官方文档:http://www.php.net/manual/en/language.operators.logical.php

<?php
$a = true and false; # FALSE
$b = true and 5; # TRUE
$c = '' and 0; # FALSE
$d = null and true; # FALSE
?>