作者:zhanhailiang 日期:2014-10-08

今天遇到一个非常奇怪的bug,測试例如以下:

<?

php
$a = 'abc';
var_dump(isset($a['code'])); // 理论上应该是False,可是确是TRUE

查了下手冊说明:

Example #2 isset() on String Offsets
 
PHP 5.4 changes how isset() behaves when passed string offsets.
 
<? php
$expected_array_got_string = 'somestring';
var_dump(isset($expected_array_got_string['some_key']));
var_dump(isset($expected_array_got_string[0]));
var_dump(isset($expected_array_got_string['0']));
var_dump(isset($expected_array_got_string[0.5]));
var_dump(isset($expected_array_got_string['0.5']));
var_dump(isset($expected_array_got_string['0 Mostel']));
?>
Output of the above example in PHP 5.3:
 
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
Output of the above example in PHP 5.4:
 
bool(false)
bool(true)
bool(true)
bool(true)
bool(false)
bool(false)

总结例如以下:使用isset前最好先使用is_array/is_string推断下变量类型以避免不同PHP版本号出现不一致性问题,还是那句老话,PHP是弱类型语言。可是弱类型并不表示没有类型。例如以下:

<?php
 
$a = 'abc';
var_dump(is_array($a) && isset($a['code']));

最新文章

  1. SVN版本冲突,导致出现Files 的值“ &lt; &lt; &lt; &lt; &lt; &lt; &lt; .mine”无效
  2. SqlServer查询表中各列名称、表中列数
  3. vs2010下C++调用lib或dll文件
  4. [stm32] 一个简单的stm32vet6驱动2.4寸240X320的8位并口tft屏DEMO
  5. 让Windows新建UTF-8编码的文本文件
  6. Windows Store Apps, Error: The certificate specified has expired.(转)
  7. SQL - 批量修改表中所有行数据某字段的部分内容
  8. java中获得jar包执行路径的方法
  9. Xcode中不用Storyboard,用纯xib创建TabBar模式视图
  10. 最简单的基于FFmpeg的AVDevice例子(屏幕录制)
  11. [IOT] 自制蓝牙工牌办公室定位系统 (一)—— 阿里物联网平台概览及打通端到云(硬核&#183;干货)
  12. Chapter_4_JAVA作业
  13. 16.The Effect of Advertisement 广告的影响
  14. Linux删除软链接
  15. windows 重装系统
  16. day5 列表
  17. doctype和Quirks模式
  18. iOS开发--libxml/HTMLparser.h file not found 解决方法 (libxml.dylib错误处理)
  19. PHP学习必读的20本书
  20. 史上最简单的SpringCloud教程 | 第十二篇: 断路器监控(Hystrix Dashboard)(Finchley版本)

热门文章

  1. linux命令(001) -- chkconfig
  2. 涨知识---IV
  3. canvas杂记
  4. 4th 循环结构概述和for语句的格式及其使用
  5. 神经网络图灵机(Neural Turing Machines, NTM)
  6. 【VHDL】深度讲解二进制无符号和有符号加法处理溢出的问题
  7. HDU_3308_线段树_区间合并
  8. HDU_5734_数学推公式
  9. java_randomAccessFile类的使用
  10. 关于在win7旗舰版32位上 安装 net4.0 的闪退问题研究 和安装sqlserver2008问题