为什么这段代码输出200?

时间:2016-01-28 12:25:57

标签: php function

请解决这个问题......

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!!!!!

任何帮助过这个的人?

2 个答案:

答案 0 :(得分:4)

你做的是echo 0 * (echo (10 + 10)). 使用括号的优先级,您首先echo 10 + 10 (= 20),然后echo 0 * (void),似乎void被隐式强制转换为int(0),其中void是函数abc的返回,所以输出是200。

6 * void30 * 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)

您应该在函数中使用returnreturn值。

示例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。这会将200并排创建为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