奇怪的变量赋值

时间:2010-09-04 03:34:18

标签: php variable-assignment

我正在研究我最近在网上找到的一些代码,并且遇到了这种PHP语法:

<?php $framecharset && $frame['charset'] = $framecharset; ?>

有人可以解释这行代码中发生了什么吗? 哪些变量被分配了什么值,以及&amp;&amp ;;的目的是什么?运营商,在声明的那个位置?

谢谢! 专利

2 个答案:

答案 0 :(得分:3)

啊,我刚刚在javascript中写了一篇关于这个成语的博文:

http://www.mcphersonindustries.com/

基本上它正在测试$framecharset是否存在,然后尝试将其分配给$frame['charset'],如果它是非空的。

它的工作方式是口译员很懒惰。 &&陈述的双方都必须是真实的才能继续。如果遇到false后跟&&的值,则会停止。它不会继续评估(因此在这种情况下,如果$framecharsetfalsenull,则不会进行分配。

有些人甚至会在&&之后放置更“昂贵”的布尔表达式的一半,所以如果第一个条件不是true,那么昂贵的位将永远不会处理。可以说这实际可以节省多少,但它使用相同的原则。

答案 1 :(得分:2)

PHP中的

&&被短路,这意味着如果RHS评估为LHS,则不会评估false,因为结果永远是false

您的代码:

$framecharset && $frame['charset'] = $framecharset;

相当于:

if($framecharset) {
    $frame['charset'] = $framecharset;
}

仅当值评估为$framecharset并且在PHP

时,才会将charset的值作为值分配给数组键true
  

除了两个字符串外,所有字符串均为true:字符串 根本不包含 ,字符串只包含 字符0 < /强>