我正在努力提高我的编码忍者h4x技能,我目前正在寻找不同的框架,我找到了很难谷歌的示例代码。
我正在查看项目中使用的FUEL framework。
我不明白的样本是
$data and $this->template->set_global($data);
这行代码中的和关键字是什么?它被用在框架中的许多地方,它是我发现的第一个使用它的地方。
答案 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,这意味着它需要两个操作数并返回一个布尔值 - true
或false
。如果两个操作数都计算为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
?>