V2EX 首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  PHP

一道 PHP 题,反正我是没想到

  •  
  •   abusizhishen · 9 天前用 Android 发布 · 3233 次点击

    $a="zzz"; $a++; echo $a; 请说出答案

    37 回复  |  直到 2018-01-14 10:12:32 +08:00
        1
    kran   9 天前
    没想到。。
    我想洗地。
        2
    lihongjie0209   9 天前
    自己跑一遍不就知道答案了?
        3
    choicky   9 天前 via iPhone
    1 ?
        4
    azoon   9 天前
    以为是 aaa,结果是 aaaa
        5
    dream7758522   9 天前 via Android
    明显是故意显摆的题,字符串++,一般编程不会这样子写吧!
        6
    zengzizhao   9 天前
    好吧,居然还会进位
        7
    misaka19000   9 天前 via Android   ♥ 10
    新时代的茴香豆的四种写法
        8
    dan2001go   9 天前   ♥ 2
    脑子有病才会出这样的题目来考人。
        9
    klgd   9 天前
    我知道 ++ 时 z 被转为 ascii 码 但是不知道值是多少
        10
    klgd   9 天前   ♥ 1
    @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 )。递增/递减其他字符变量则无效,原字符串没有变化。
        12
    yujieyu7   9 天前
    这面试人是想考察什么?

    字符变量的算数运算?

    他工作中就经常拿个字符串去这么运算?
        13
    yangbin9317   9 天前
    看这里

    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   9 天前
    反正我是不会写这种代码的
        15
    shiny   9 天前   ♥ 1
    谁要是代码写成这样,一个巴掌就拍过去了。
        16
    zakokun   9 天前
    又来各种姿势黑 php 了,写 php 的能不能稍微提一点正常的问题?
        17
    zakokun   9 天前
        18
    zakokun   9 天前
    @zakokun https://www.v2ex.com/t/133080#reply45 顺便看一下 V2 的这个帖子,你能懂得更多
        19
    aikunzhe   9 天前   ♥ 1
    excel 导出时,制作表头用到,
        20
    hoyixi   9 天前
    楼上很多哥们抱怨“谁要是代码写成这样”~

    当然直接写成这种代码概率很小,但是这是考题啊,简化了,只给出问题实质。 实际中,很可能是$a 是一个输入,或者某个计算、拼接、调用等等的结果,如果对这个结果是字符串而非预期的数值,然后++,就出现题目中的情况了。
        21
    sagaxu   9 天前
    @hoyixi 会解这个考题,对解决类似 bug,一点儿帮助都没有
        22
    nyanyh   9 天前
    这不是一个文档看没看完整的问题吗
        23
    hoyixi   9 天前
    @sagaxu

    是的,所以给出一段 bug 代码和奇葩输入,然后要么让写输出结果,要么解释为啥得到意外的输出,最后问怎么改这段代码, 这样更有意义。

    不过笔试和笔试题早就变成形式主义了,纯筛选,网上荡一份或者题库抽一份,应付差事完事~
        24
    guog   9 天前 via Android
    23333
    要不要来一个这样的呀~

    $a="9d9";
    $a++;
    echo $a;
    $a++;
    echo $a;
        25
    pyufftj   9 天前
    @dan2001go 说真的,笔试中经常遇到这样的题。
        26
    Mitt   9 天前 via iPhone
    就是代码水平问题 换什么语言都一样 换 js 还不哭死你 这影响 js 的地位了吗?
        27
    akira   9 天前
    @yangbin9317 问个问题,switch 的 default 不是最后一个了么,应该不需要加 break 了吧, 有什么特殊作用么
        28
    X1r0z   9 天前 via Android
    就想问这行代码有什么实际应用场景....
        29
    SimbaPeng   9 天前   ♥ 1
    我就想问楼上一群 bb 题目脑残,实际中用不到等等的人,你们从小学到大的文言文,在你们实际工作生活中有用到过吗?如果没有,那你们当初学文言文的时候,怎么不跟老师说,脑子有病的人才学文言文,又用不到
        30
    cjyang1128   9 天前
    @aikunzhe 学到了!!!!当时还是自己模拟了进制运算来写的,没想到还有这种解法
        31
    abusizhishen   9 天前 via Android
    @yangbin9317 有点叼,不过表示我没看懂
        32
    crist   9 天前
    PHP 是最好的语言,众喷退散!
        33
    killerv   9 天前
    没意义
        34
    gidot   9 天前
    这种题平时程序员之间用来解闷还行,面试如果我遇到类似的题就直接走掉。非常轻浮不礼貌的问题。
        35
    changwei   8 天前 via Android   ♥ 3
    不是我黑 php,你去看看大厂的开源项目或者内部的代码,基本上所有涉及到变量运算,数据封装等操作,都会严格使用 strval,intval 之类的函数。

    我以前碰巧因为挖到某厂一个源码泄漏漏洞,有幸阅读了一下他们整套内部框架的源代码,基本上都是这么操作的。当然现在 php7 有强类型了肯定会更加方便。

    考察怪异代码的执行结果有什么意义?难道你们公司招聘的是 php 编译器开发者? php 是因为目前只有官方自己的编译器所以看似背下这些所谓的面试题好像很厉害的样子。如果换成 c++等编程语言,有各种编译器,不同编译器对一些奇葩写法的编译结果完全不一样,你是不是要把每个编译器的怪异行为都去测试一遍?
        36
    abusizhishen   8 天前 via Android
    感谢各位,学到了
        37
    Actrace   8 天前
    负责过很多面试。

    这个问题应该是希望考察应聘者的经验,特别是在 PHP 本身特性的了解程度上。
    对于某些涉及到运算的领域非常重要,因为 PHP 是弱类型语言,如果对弱类型不了解,很容易出现楼上各位提到的字符串问题。如果是开发账务系统,那确实是需要严谨的类型处理。

    不过上述所言是理想主义,我觉得这道题可以考验到经验程度,但是不能作为一个主要判断(写了 8 年 PHP 的我也是第一次碰到这个问题,大多数时候 PHP 主要用来处理字符串相关的问题,这是比 C 要方便很多的地方)。

    所以这道题实质上意义不大,毕竟对于大多数 PHP 岗位,我认为应聘者对语法的熟练程度要更重要一些,重要部分的经验问题可以通过统一的培训来补足。但是语法不行还得花时间慢慢熟悉,很致命。
    DigitalOcean
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   1430 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.0 · 66ms · UTC 16:21 · PVG 00:21 · LAX 08:21 · JFK 11:21
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1