<?php
function a($n){
return ( b($n) * $n);
}
function b(&$n){
++$n;
}
echo a(5);
?>
我在这个星期天做了一次考试,想知道为什么这段代码的输出是 0
?
我不是php的开发者,所以任何帮助都会受到赞赏。
答案 0 :(得分:7)
代码提供0
,因为它缺少return
。与下面的内容相比(如图所示进行了更正)产生36
,如另一个答案中所推断的那样。
function a($n){
// Since b($n) doesn't return a value in the original,
// then NULL * $n -> 0
return ( b($n) * $n);
}
function b(&$n){
// But if we return the value here then it will work
// (With the initial condition of $n==5, this returns 6 AND
// causes the $n variable, which was passed by-reference,
// to be assigned 6 such that in the caller
// it is 6 * $n -> 6 * 6 -> 36).
return ++$n;
}
echo a(5);
请参阅Passing by Reference了解function b(&$n)
的工作原理;如果签名为function b($n)
,则结果为30。
答案 1 :(得分:3)
function a($n) {
return (b($n) * $n);
}
function b(&$n){
++$n;
}
echo a(5);
这是当您致电echo a(5);
时发生的事情(不是实际的顺序,只是为了演示):
return (b($n) * $n);
此返回语句包含两部分:b($n)
和$n
。 b($n)
是对函数b
的调用。函数b
通过引用接受其参数,并将值递增1
。请注意,不会返回值。
由于它未返回值,b($n)
将为NULL
。证明:
function a($n){
$v = b($n);
var_dump($v);
return (b($n) * $n);
}
输出:
NULL
在下一步中,您将b($n)
(NULL
)的结果乘以$n
(等于6
)。
结果是NULL
* 0
。结果是什么?使用var_dump()
:
var_dump(NULL * 6);
输出:
int(0)
如果你在b
中返回一个值,那么一切都会很好,花花公子。
function a($n){
return (b($n) * $n);
}
function b(&$n){
return ++$n;
}
echo a(5);
输出:
36
答案 2 :(得分:2)
默认情况下,在PHP中,return语句等于NULL / 0。 因此,即使b()函数通过引用更改了n的值,return语句也等于null。 然后,当你将这个return语句乘以(等于零)任何数字时,它将等于零。
尝试在b()定义的末尾添加“return 1”,结果应该等于 n 。