【问题标题】:Strange variable assignment奇怪的变量赋值
【发布时间】:2011-04-08 03:13:36
【问题描述】:

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

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

有人能解释一下这行代码发生了什么吗? 在语句的那个​​位置,哪些变量被分配了什么值,&& 运算符的目的是什么?

谢谢! 帕特

【问题讨论】:

    标签: php variable-assignment


    【解决方案1】:

    啊,我刚刚用javascript写了一篇关于这个成语的博客文章:

    http://www.mcphersonindustries.com/

    基本上它是在测试查看$framecharset 是否存在,然后尝试将其分配给$frame['charset'](如果它不为空)。

    它的工作方式是解释器是懒惰的。 &amp;&amp; 声明的双方都需要为真才能继续。当它遇到false 值后跟&amp;&amp; 时,它会停止。它不会继续评估(因此在这种情况下,如果 $framecharsetfalsenull,则不会发生分配。

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

    【讨论】:

    • Alex,确切的 javascript 等效语法是什么样的?
    • 哦,我在你的博客上看到了,谢谢。
    【解决方案2】:

    PHP 中的&amp;&amp; 是短路的,这意味着如果LHS 评估为false,则不会评估RHS,因为结果将始终为false

    您的代码:

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

    相当于:

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

    仅当值评估为 true 并且在 PHP 中时,才会将 $framecharset 的值作为值分配给数组键 charset

    所有字符串都是真的,除了两个:一个字符串什么都不包含和一个只包含字符0

    【讨论】:

      猜你喜欢
      • 2012-12-15
      • 2015-04-01
      • 2016-06-01
      • 2012-12-16
      • 1970-01-01
      • 2014-09-03
      • 1970-01-01
      • 2018-09-01
      相关资源
      最近更新 更多