' 42'来自?

时间:2014-04-02 10:27:31

标签: php

考虑:

php > echo '1 + 5' * '42 + 1' . "\n";
42

我期待某种错误或警告,但是PHP让我们在没有抱怨的情况下成倍增加字符串。但是,为什么它显示第二个字符串中的第一个整数?

更多的例子,我发现结果背后没有真正的逻辑原因:

php > echo '1 hi' * '42 + 1' . "\n";
42
php > echo 'hi' * '42 + 1' . "\n";
0
php > echo '1 + 5' * '42 + hi' . "\n";
42
php > echo '1 + 5' * '42 hi' . "\n";
42
php > echo '1 + 5' * '42hi' . "\n";
42

1 个答案:

答案 0 :(得分:6)

PHP尝试将字符串动态转换为数字,并根据它获得的数据进行数学运算。当一个字符串以非数字开头时,它会被转换为零 - 因此你的答案就是。

当PHP转换它们时,它以从左到右的方式完成:

字符串1 + 5实际上转换为数字1 - 然后42 + 1转换为42.因此,您的语句是1 * 42,结果是42的回声。零回答,你试图乘以hi(它被转换为零),因此得到的结果为零。

编辑:至于为什么它是回声而不是字符串 - 这仅仅是由于运算符优先级。数学运算符的排名高于字符串运算符 - 因此它将它视为应该解决的问题,然后回应它应该回应的内容。