echo "1+5=". 5+1; // 2
echo "1+5=". 1+5; // 6
echo "5+1=". 5+1; // 6
echo "5+1=". 1+5; // 10
只知道结果是第一个数和最后一个数相加得来的,运行时报错 A non well formed numeric value encountered
个人猜测是运算符优先级问题和 PHP 弱类型? google 了半天也没找到解释,有大神指点吗?
echo "1+5=". 5+1; // 2
echo "1+5=". 1+5; // 6
echo "5+1=". 5+1; // 6
echo "5+1=". 1+5; // 10
只知道结果是第一个数和最后一个数相加得来的,运行时报错 A non well formed numeric value encountered
个人猜测是运算符优先级问题和 PHP 弱类型? google 了半天也没找到解释,有大神指点吗?
|
loadingerNov 21, 2017
1
你把最后的两个相加的数字上面加个括号试试.
|
|
SankoNov 21, 2017 via Android
3
好神奇
|
|
zjsxwcNov 21, 2017
4
可以用隐式类型转换理解
echo intval("1+5=". 5)+1; // 2 echo intval("1+5=". 1)+5; // 6 echo intval("5+1=". 5)+1; // 6 echo intval("5+1=". 1)+5; // 10 intval 会把字符串第一个开始最长数字字符转换为数字 |
|
5
他的运算时这样的 "1+5=" . 5 = "1+5=5"; "1+5=5"+1 = 2; http://php.net/manual/zh/language.types.string.php#language.types.string.conversion
|
|
6
和 c+++++c 一样无聊
.优先计算了,结果字符串 遇到+,尝试转数字类型,转的过程中遇到非数字停止,所以只剩第一个数字+最后一个数字 |
|
SmileccNov 21, 2017
7
`echo "5+1=". 1+5;`被解析为`echo ("5+1=". 1)+5;`
前面是个字符串拼接,也就是 `"5+1=1" + 5`,最终`5+1=1`这个字符串,转换成数字,第一个是数字 5,然后+号不是数字,于是被认为是数字 5,加上最后的一个 5,结果是 10。 一点也不郁闷,只能说这代码从语法上就不对。 |
|
kiwi95Nov 21, 2017 via Android
8
报错不是很明显了?用这个报错去 Google 搜不到答案?
|
|
xiaoqiNov 21, 2017
12
这好像没啥郁闷的,主要是字符串拼接后的整形转换...
|
|
realpgNov 21, 2017
13
出这种题的要是线下 我都会直接拿水杯扔人
|
|
jason19659Nov 21, 2017
14
echo "1+ [5=". 5+] 1; // 2
echo "1+ [5=". 1+] 5; // 6 echo "5+ [1=". 5+] 1; // 6 echo "5+ [1=". 1+] 5; // 10 括号内删掉? 神奇的语言。。。 ~~.~~ |
|
16
@R18 #15
为啥要考这种我这个 12 年 PHPer 都遇不到的问题? 这题的核心是 PHP 官方手册都没写明白的字符串运算符与算术运算符的优先级问题,第二个知识点是强制转换 第三个是隐式 intval 的处理方式 如果单纯考后两个知识点,很正常,我也不会说啥,毕竟总用得到 第一个,PHP 手册都没写明白(官方把这两个放在一个里面,但是没写这两个一起遇到的优先级。 下面的第一个高亮 user note 就说这个问题),想了解就靠实际操作 对于一个稍微合格一点的 PHP 程序员,对于这种自己的刚性掌握准确度不是 100%的东西,都不是直接写,而是查手册,这种情况手册本身没写,就是写测试看看实际执行推测,并发帖验证 |
|
17
另外 就算这种方式知识了解,实际用的正确,敢写这样代码的早已经被正经公司开除了
|
|
andrewDDCNov 21, 2017
19
好无聊
|
|
gdtvNov 21, 2017
20
加几个括号就能解决的问题,为什么要这么折腾人?
|
|
iccfishNov 21, 2017
21
PHP 真是一门神奇的语言啊哈哈哈哈哈哈哈哈哈
|
|
checggNov 21, 2017
22
又来黑 PHP。。。。
|
|
lsls931011Nov 21, 2017
23
@Smilecc 正解,这个在 PHP 手册上有写过
|
|
24
来,你会不会回字的四种写法?
囘 囬 廻 迴 |
|
GGGG430Nov 21, 2017 via Android
25
不就是个隐式转换
|
|
fengyqfNov 21, 2017
26
咱能多看看手册吧,至少语言参考一章,一字不落的看三遍。
所有编程语言的手册,中文最全面的恐怕就是 PHP 了(没有之一). 不得不说,php 里+-.三个运算符同优先级,还有隐式数字转换,都是坑 |
|
28
这几道题不算什么,我来出一道
echo '9,999' + 1; |
|
laoyuanNov 21, 2017
30
LS 你来告诉我答案啊
|
|
msg7086Nov 21, 2017
31
还有这种题:
$a = '9d9'; $a++; $a--; echo $a; |
|
yangbin9317Nov 21, 2017
32
很简单啊
"1+5=". 5 是 "1+5=5" "1+5=5" + 1 "1+5=5" 被转为 1 也就是 1 + 1 也就是 2 |
|
bramblexNov 21, 2017
33
胡乱转了类型还不跟你说一声, 所以我们才称 php 为世界上最好的语言
|
|
kookxiangNov 21, 2017 via iPhone
34
谭语言?
|
|
sagaxuNov 22, 2017 via Android
36
php 也需要来一本 the good part 了,中文名 php 精粹,然后写完发现只有 20 页
|
|
slgzNov 22, 2017
38
作为一个两年的 phper,没看到回复,还真不知道答案,是不是很失败
|