
$a="zzz"; $a++; echo $a; 请说出答案
1 kran 2018-01-13 12:07:32 +08:00 没想到。。 我想洗地。 |
2 lihongjie0209 2018-01-13 12:10:22 +08:00 自己跑一遍不就知道答案了? |
3 choicky 2018-01-13 12:12:56 +08:00 via iPhone 1 ? |
4 azoon 2018-01-13 12:14:45 +08:00 以为是 aaa,结果是 aaaa |
5 dream7758522 2018-01-13 12:30:11 +08:00 via Android 明显是故意显摆的题,字符串++,一般编程不会这样子写吧! |
6 zengzizhao 2018-01-13 12:33:40 +08:00 好吧,居然还会进位 |
7 misaka19000 2018-01-13 12:44:26 +08:00 via Android 新时代的茴香豆的四种写法 |
8 dan2001go 2018-01-13 12:51:00 +08:00 脑子有病才会出这样的题目来考人。 |
9 klgd 2018-01-13 12:54:09 +08:00 我知道 ++ 时 z 被转为 ascii 码 但是不知道值是多少 |
10 klgd 2018-01-13 13:04:28 +08:00 @klgd #9 我弄错了 > 在处理字符变量的算数运算时,PHP 沿袭了 Perl 的习惯,而非 C 的。例如,在 Perl 中 $a = 'Z'; $a++; 将把 $a 变成'AA',而在 C 中,a = 'Z'; a++; 将把 a 变成 '['('Z' 的 ASCII 值是 90,'[' 的 ASCII 值是 91 )。注意字符变量只能递增,不能递减,并且只支持纯字母( a-z 和 A-Z )。递增/递减其他字符变量则无效,原字符串没有变化。 |
11 stooory 2018-01-13 13:05:45 +08:00 |
12 yujieyu7 2018-01-13 13:55:50 +08:00 这面试人是想考察什么? 字符变量的算数运算? 他工作中就经常拿个字符串去这么运算? |
13 yangbin9317 2018-01-13 14:54:22 +08:00 看这里 https://github.com/php/php-src/blob/master/Zend/zend_operators.c 第 2417 2418 行 switch (is_numeric_string(Z_STRVAL_P(op1), Z_STRLEN_P(op1), &lval, &dval, 0)) { case IS_LONG: zend_string_release(Z_STR_P(op1)); if (lval == ZEND_LONG_MAX) { /* switch to double */ double d = (double)lval; ZVAL_DOUBLE(op1, d+1); } else { ZVAL_LONG(op1, lval+1); } break; case IS_DOUBLE: zend_string_release(Z_STR_P(op1)); ZVAL_DOUBLE(op1, dval+1); break; default: /* Perl style string increment */ increment_string(op1); break; } |
14 mb135 2018-01-13 14:56:46 +08:00 反正我是不会写这种代码的 |
15 shiny 2018-01-13 15:00:52 +08:00 谁要是代码写成这样,一个巴掌就拍过去了。 |
16 zakokun 2018-01-13 15:04:55 +08:00 又来各种姿势黑 php 了,写 php 的能不能稍微提一点正常的问题? |
17 zakokun 2018-01-13 15:05:24 +08:00 |
18 zakokun 2018-01-13 15:06:10 +08:00 @zakokun t/133080#reply45 顺便看一下 V2 的这个帖子,你能懂得更多 |
19 aikunzhe 2018-01-13 16:14:08 +08:00 excel 导出时,制作表头用到, |
20 hoyixi 2018-01-13 16:58:16 +08:00 楼上很多哥们抱怨“谁要是代码写成这样”~ 当然直接写成这种代码概率很小,但是这是考题啊,简化了,只给出问题实质。 实际中,很可能是$a 是一个输入,或者某个计算、拼接、调用等等的结果,如果对这个结果是字符串而非预期的数值,然后++,就出现题目中的情况了。 |
22 nyanyh 2018-01-13 18:59:43 +08:00 这不是一个文档看没看完整的问题吗 |
23 hoyixi 2018-01-13 19:27:44 +08:00 @sagaxu 是的,所以给出一段 bug 代码和奇葩输入,然后要么让写输出结果,要么解释为啥得到意外的输出,最后问怎么改这段代码, 这样更有意义。 不过笔试和笔试题早就变成形式主义了,纯筛选,网上荡一份或者题库抽一份,应付差事完事~ |
24 guog 2018-01-13 19:28:21 +08:00 via Android 23333 要不要来一个这样的呀~ $a="9d9"; $a++; echo $a; $a++; echo $a; |
26 Mitt 2018-01-13 19:40:12 +08:00 via iPhone 就是代码水平问题 换什么语言都一样 换 js 还不哭死你 这影响 js 的地位了吗? |
27 akira 2018-01-13 20:04:17 +08:00 @yangbin9317 问个问题,switch 的 default 不是最后一个了么,应该不需要加 break 了吧, 有什么特殊作用么 |
28 X1r0z 2018-01-13 20:23:28 +08:00 via Android 就想问这行代码有什么实际应用场景.... |
29 SimbaPeng 2018-01-13 20:24:10 +08:00 我就想问楼上一群 bb 题目脑残,实际中用不到等等的人,你们从小学到大的文言文,在你们实际工作生活中有用到过吗?如果没有,那你们当初学文言文的时候,怎么不跟老师说,脑子有病的人才学文言文,又用不到 |
30 cjyang1128 2018-01-13 20:40:55 +08:00 @aikunzhe 学到了!!!!当时还是自己模拟了进制运算来写的,没想到还有这种解法 |
31 abusizhishen OP @yangbin9317 有点叼,不过表示我没看懂 |
32 crist 2018-01-13 21:36:33 +08:00 PHP 是最好的语言,众喷退散! |
33 killerv 2018-01-13 22:06:49 +08:00 没意义 |
34 gidot 2018-01-13 23:22:41 +08:00 这种题平时程序员之间用来解闷还行,面试如果我遇到类似的题就直接走掉。非常轻浮不礼貌的问题。 |
35 changwei 2018-01-14 00:37:59 +08:00 via Android 不是我黑 php,你去看看大厂的开源项目或者内部的代码,基本上所有涉及到变量运算,数据封装等操作,都会严格使用 strval,intval 之类的函数。 我以前碰巧因为挖到某厂一个源码泄漏漏洞,有幸阅读了一下他们整套内部框架的源代码,基本上都是这么操作的。当然现在 php7 有强类型了肯定会更加方便。 考察怪异代码的执行结果有什么意义?难道你们公司招聘的是 php 编译器开发者? php 是因为目前只有官方自己的编译器所以看似背下这些所谓的面试题好像很厉害的样子。如果换成 c++等编程语言,有各种编译器,不同编译器对一些奇葩写法的编译结果完全不一样,你是不是要把每个编译器的怪异行为都去测试一遍? |
36 abusizhishen OP 感谢各位,学到了 |
37 Actrace 2018-01-14 10:12:32 +08:00 负责过很多面试。 这个问题应该是希望考察应聘者的经验,特别是在 PHP 本身特性的了解程度上。 对于某些涉及到运算的领域非常重要,因为 PHP 是弱类型语言,如果对弱类型不了解,很容易出现楼上各位提到的字符串问题。如果是开发账务系统,那确实是需要严谨的类型处理。 不过上述所言是理想主义,我觉得这道题可以考验到经验程度,但是不能作为一个主要判断(写了 8 年 PHP 的我也是第一次碰到这个问题,大多数时候 PHP 主要用来处理字符串相关的问题,这是比 C 要方便很多的地方)。 所以这道题实质上意义不大,毕竟对于大多数 PHP 岗位,我认为应聘者对语法的熟练程度要更重要一些,重要部分的经验问题可以通过统一的培训来补足。但是语法不行还得花时间慢慢熟悉,很致命。 |