这个PHP函数返回什么?

4

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

顺便说一下,这是Dagfinn Reiersol的《PHP实战》中的摘录。根据该书,此函数返回$child,但在成功赋值的情况下应返回true,否则返回false吗?

提前致谢。

2个回答

9
它返回$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

嗯..好的..我现在没有太多时间,但我会再仔细想一想,然后回来将其标记为正确答案。谢谢。 - Felipe
好的,谢谢。我已经发布了没有使用快捷方式的表达式的样子。 - Chris Laplante
很好的解释,@SimpleCoder。但是天哪——所需的解释长度完美地说明了为什么这种缩写在现实生活中的代码中是一个坏主意。希望《PHP实战》的作者将其用作如何不编写可维护代码的案例研究。 - Ben Dunlap
@Ben Dunlap;谢谢。我完全同意,在那些情况下混淆===非常容易。这就是错误和失误悄悄产生的方式。 - Chris Laplante

1

它确实返回子元素,因为赋值语句只会返回被赋的值。

它是否应该在成功时返回 true 不是一个规则,所以如果它被记录为返回子元素,那就是正确的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接