请解决这个问题......
function abc($a, $b) {
echo $c = $a+$b;
}
echo 0*( abc(10,10) ); // giving output 200!!!!!
echo "<br />";
echo 6*( abc(10,10) ); //giving output 200!!!!!
echo "<br />";
echo 30*( abc(10,10) ); //giving output 200!!!!!
任何帮助过这个的人?
答案 0 :(得分:4)
你做的是echo 0 * (echo (10 + 10)).
使用括号的优先级,您首先echo 10 + 10 (= 20),
然后echo 0 * (void)
,似乎void被隐式强制转换为int(0)
,其中void是函数abc
的返回,所以输出是200。
6 * void
和30 * void = 0
也是如此,因此输出相同。
编辑: 这是一步一步发生的事情: 回声0 *(abc(10 + 10)):
1)调用abc
2)回显10 + 10(此时它输出20个。)
3)从abc返回(由于你没有指定返回值,它返回void)
4)评估0 *(abc(10 + 10))= 0 * void = 0 * 0 = 0
5)回显0(所以它在步骤2的20之后输出0))。
第二行和第三行的步骤相同,因为6 * 0和30 * 0也等于0.
答案 1 :(得分:2)
您应该在函数中使用return
来return
值。
示例1:(LINK)
function abc($a, $b) {
return $a+$b;
}
echo 0*( abc(10,10) ); // gives output of 0
echo "<br />";
echo 6*( abc(10,10) ); // gives output of 120
echo "<br />";
echo 30*( abc(10,10) ); // gives output of 600
结果将返回200
,因为函数echos 20
会返回0
。这会将20
和0
并排创建为200
,从而创建200
展示。
如果我在回声的末尾添加一个空格,你会看到20 0 20 0 20 0
。
有关详细信息,请参阅 @Krapow 的答案。
示例2:(LINK)
function abc($a, $b) {
echo $a+$b." ";
}
echo 0*( abc(10,10) ); // gives output of 20 0
echo "<br />";
echo 6*( abc(10,10) ); // gives output of 20 0
echo "<br />";
echo 30*( abc(10,10) ); // gives output of 20 0