给 phper 出一道基本的面试题, 做错了得加强基础了/

2017-03-23 16:11:43 +08:00
 qwe3364925
请输出该结果
echo '6+5' . 9+7;
7715 次点击
所在节点    PHP
74 条回复
rashawn
2017-03-23 23:24:25 +08:00
楼主是来黑最好语言的吧
realpg
2017-03-24 00:23:10 +08:00
@bianhua #40
就运算符优先级这种问题来说,合格的 PHPer 的套路是 不去管它优先级,显而易见的加法乘法不算,其他能括号就括号,能拆开写就不连一起写 没必要炫技 就算你现在写的优先级对,万一哪天 PHP 大升级调整优先级规则 那之前历史代码全得一点点改
wohenyingyu02
2017-03-24 00:26:27 +08:00
看不懂
des
2017-03-24 08:15:04 +08:00
@qwe3364925 来来来,楼主请答一下这题
class A{
public $bar = 1;
public $c = 2;
}
$a = new A();
$bar = ['baz'=>'c'];
echo $a->$bar['baz'];

@moult
js 嘛,坑多了去了
比如这个
if([]){alert(0);};
if([]==false){alert(1);};
if(![]==false){alert(2);};
killerv
2017-03-24 08:57:56 +08:00
没有意义,写这种代码的人会被打死
Clarencep
2017-03-24 09:12:55 +08:00
看到 LZ 被喷我就放心了 -- 加个括号会死啊!
qdpoboy
2017-03-24 09:31:12 +08:00
@TIGERB 走对第一步,却走错了第二部,是不是要重新回炉下基础知识 /苦笑
mx1700
2017-03-24 09:38:50 +08:00
看到楼主被喷我就放心了
cjyang1128
2017-03-24 09:55:04 +08:00
这种题目的意义不在于程序员为什么会写出这种代码,而在于 phper 要关注代码的安全性。如果大家做过 web 渗透或者代码审计的话,就不会喷了,因为很多情况下可以通过这种强制类型转换绕过一些判断。
CuminLo
2017-03-24 10:20:02 +08:00
@Immortal 然后就没有人接你这个话了。

```
php -r 'echo '6+5' . 9+7 . PHP_EOL;';
126
```
2owe
2017-03-24 10:33:55 +08:00
有几种情况:

1. 126

php -r 'echo '6+5' . 9 + 7;'

相当于 intval('11' . '9') + 7


2. 13

php -r "echo '6+5' . 9 + 7;"

相当于 '6+59' + 7 = 6 + 7 ,运行会报警 Notice: A non well formed numeric value encountered ,说明有碰到这种非预期的数值转化,可能有 bug 。


3. syntax error

php -r "echo '6+5'.9 + 7;"

报错 PHP Parse error: syntax error, unexpected '.9' (T_DNUMBER), expecting ',' or ';' in Command line code on line 1
『.9 』 被当成符号了, echo 后面只支持 『,』和『;』。
CuminLo
2017-03-24 10:37:22 +08:00
@2owe 赞。
mentalidade
2017-03-24 10:53:20 +08:00
@2owe 第一种情况,单引号里面内容是不会被解释的,肯定错了
suren1986
2017-03-24 11:10:18 +08:00
为什么要写这样的代码?炫技?
allenhu
2017-03-24 11:14:29 +08:00
@bianhua 跟语言没太大关系的,真心想死的人,没人拦得住
blackshadow
2017-03-24 11:21:04 +08:00
不好意思。报错了。 Parse error: syntax error, unexpected '.9' (T_DNUMBER), expecting ',' or ';' 你们是怎么运行的?
testlc
2017-03-24 11:22:09 +08:00
遇到坑就不能绕道走吗?非要在上面拉条钢丝去走。
hj2002007
2017-03-24 12:45:12 +08:00
echo '6+5' . 9+7;
考察 内容有:
运算优先级
隐式转换
1.按照优先级 从左到右
'6+5' . 9 : 左边是字符串 所以字符连接 是“ 6+59 “
2.隐式转换 (整型)
“ 6+59 “ 按照规则 转化为 6 因为出现了 + 所以只转换 6 为数字
3.加法运算
6+7 = 13

不清楚问题的可以 看看《 php 编程》这本书 对这些讲解还是很清楚的

不过私以为 作为面试题 不是很合适 因为好久没练习了
wavingclear
2017-03-24 12:50:31 +08:00
真是 13 ,没报错, PHP7 环境
果然没记住算数+和字符串.是同一个优先级
KasonPasser
2017-03-24 13:31:37 +08:00
为什么要写这样的代码?🤔🤔🤔

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/349774

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX