【问题标题】:What does this PHP function return?这个 PHP 函数返回什么?
【发布时间】:2010-09-20 22:09:34
【问题描述】:

公共函数添加($child){ 返回 $this->children[]=$child; }

顺便说一句,这是 Dagfinn Reiersol 的 PHP in Action 的摘录。根据这本书,这会返回 $child,但它不应该在分配成功的情况下返回 true,否则返回 false?

提前致谢

【问题讨论】:

    标签: php function return-value associativity


    【解决方案1】:

    它返回$child。这是因为$child 首先添加到数组$this->children[]。然后,返回这个赋值的结果。

    本质上,它是以下的简写:

    public function add($child){
        $this->children[]=$child;
        return $child;
    }
    

    这种快捷方式有效,因为在 PHP 中,赋值是“右关联”:http://www.php.net/manual/en/language.operators.precedence.php

    这意味着 $a = ($b = 3) 实际上是从右到左计算的,3 存储在 $b 然后 $a。另外,这里是我提供链接的页面上的注释:

    虽然 = 的优先级低于 大多数其他运算符,PHP 仍将 允许类似的表达 以下:if (!$a = foo()),其中 如果foo() 的返回值被放入 进入$a

    更多信息:http://en.wikipedia.org/wiki/Operator_associativity

    【讨论】:

    • 嗯.. 好的.. 我现在没有太多时间,但我会多考虑一下,然后再回来将其标记为正确答案。谢谢。
    • 好的,谢谢,我发布了不使用快捷方式的表达式。
    • 很好的解释,@SimpleCoder。但是 yikes - 所需的解释长度完美地说明了为什么这种速记在现实生活中的代码中是一个坏主意。希望 PHP in Action 的作者将其用作如何不编写可维护代码的案例研究。
    • @Ben Dunlap;谢谢。我 100% 同意,在这种情况下很容易将 = 误认为 ==。这就是令人讨厌的错误和错误蔓延的方式。
    【解决方案2】:

    它确实返回孩子,因为赋值只返回分配的任何内容。

    成功时是否应该返回true并不是一个规则,所以如果记录返回child,那是正确的。

    【讨论】:

      猜你喜欢
      • 2020-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-21
      • 2018-01-28
      • 1970-01-01
      相关资源
      最近更新 更多