作为一个 php 新手,感觉有点坑,坑二则 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
whywhywhy
V2EX    PHP

作为一个 php 新手,感觉有点坑,坑二则

  •  
  •   whywhywhy 2014-10-06 00:53:48 +08:00 3772 次点击
    这是一个创建于 4028 天前的主题,其中的信息可能已经有所发展或是发生改变。
    explode,var_dump可以看出来,explode返回的是一个数组,既然返回的是数组,竟然不能直接在explode后面加[0]取值。哎…………

    if ( strpos('Date:','Date:') == 0 ){echo 'ok';}
    if ( strpos('2Date:','Date:') == 0 ){echo 'ok';}

    别看了,2行都是返回ok
    11 条回复    2014-10-08 08:20:31 +08:00
    SoloCompany
        1
    SoloCompany  
       2014-10-06 01:55:19 +08:00
    不明白lz吐槽的是神马

    php > var_export(explode(",","a,b,c"));
    array (
    0 => 'a',
    1 => 'b',
    2 => 'c',
    )
    php > var_export(explode(",”,"a,b,c")[0]);
    'a'
    php > echo phpversion();
    5.5.17
    keefo
        2
    keefo  
       2014-10-06 04:58:09 +08:00
    已测,只返回一个 "ok"
    breeswish
        3
    breeswish  
       2014-10-06 09:20:33 +08:00
    PHP 5.4 以前是不支持直接对函数返回的数组访问下标的,这是语法上的限制

    http://php.net/manual/zh/language.types.array.php

    「自 PHP 5.4 起可以用数组间接引用函数或方法调用的结果。之前只能通过一个临时变量。」
    breeswish
        4
    breeswish  
       2014-10-06 09:23:00 +08:00
    关于 strpos,PHP 手册上也明确写了应当使用全等符号来比较。

    http://php.net/manual/zh/function.strpos.php

    「此函数可能返回布尔值 FALSE,但也可能返回等同于 FALSE 的非布尔值。请阅读 布尔类型章节以获取更多信息。应使用 === 运算符来测试此函数的返回值。」

    不看手册凭直觉掉进了坑怪谁呢 = =
    whywhywhy
        5
    whywhywhy  
    OP
       2014-10-06 09:33:14 +08:00
    @SoloCompany 我的5.2,看来是我out了



    @keefo 想判断是不是Date:开头的字符串

    因为是在字符串开头,所以找到的话会返回0,找不到的话会返回false,在其他位置会返回对应的数字

    因为对比的时候是数字0,所以找不到时返回的false会转换成0,于是……这个判断任何时候都会返回“true”。想了好久好久,才想到这个原因。要用3个等号判断……
    whywhywhy
        6
    whywhywhy  
    OP
       2014-10-06 09:39:04 +08:00
    @breeswish
    第一个:我是asp,js菜鸟转过来的……习惯了用[0]直接放函数后面,嘿嘿,没想到在php5.4才支持。
    第二个:当时出来结果不对……就郁闷了,反复测试几次,才想到可能是判断的时候false转换成0了……

    哎,有的东西不知道用什么关键词搜,头疼。

    至于手册……大概看了看,没注意到后面
    gamexg
        7
    gamexg  
       2014-10-06 10:02:14 +08:00
    跨语言很容易掉进这种小坑。
    breeswish
        8
    breeswish  
       2014-10-06 11:05:18 +08:00
    话说 @Livid 为什么8楼@我,@成功了,却没有提醒我,并且在提醒系统历史里也没有.. 是 bug?
    anewg
        9
    anewg  
       2014-10-06 11:14:26 +08:00
    @whywhywhy 尽量用5.4以上的吧
    Mac
        10
    Mac  
       2014-10-07 22:15:09 +08:00
    以前也很固执的停在5.2上好久,后来发现越来越多的问题在5.4下不是问题了,连性能也大幅度提升。
    whywhywhy
        11
    whywhywhy  
    OP
       2014-10-08 08:20:31 +08:00
    @gamexg 不是程序员,各种语言都学了点,方便下自己而已,做做小程序啊什么的,所以就不精通啦嘿嘿


    @anewg
    @Mac

    主要是因为自己写东西少,大多时候是拿别人的来用,所以要求没那么高(也不精通),原因同上,写的时候也是其它语言带过来的习惯,难免有点不适应,嘿嘿……

    现在知道就好啦,谢谢楼上各位
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1485 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 16:41 PVG 00:41 LAX 09:41 JFK 12:41
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86