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

2014-10-06 00:53:48 +08:00
 whywhywhy
explode,var_dump可以看出来,explode返回的是一个数组,既然返回的是数组,竟然不能直接在explode后面加[0]取值。哎…………

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

别看了,2行都是返回ok
3185 次点击
所在节点    PHP
11 条回复
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
2014-10-06 04:58:09 +08:00
已测,只返回一个 "ok"
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
2014-10-06 09:23:00 +08:00
关于 strpos,PHP 手册上也明确写了应当使用全等符号来比较。

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

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

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



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

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

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

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

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


@anewg
@Mac

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

现在知道就好啦,谢谢楼上各位

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

https://www.v2ex.com/t/137207

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

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

© 2021 V2EX