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

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

  •  
  •   whywhywhy · 2014-10-06 00:53:48 +08:00 · 3365 次点击
    这是一个创建于 3709 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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   ·   实用小工具   ·   1543 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 17:07 · PVG 01:07 · LAX 09:07 · JFK 12:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.