关于isset的一点说明
2024-08-28 22:15:11
作者: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']));
最新文章
- SVN版本冲突,导致出现Files 的值“ <; <; <; <; <; <; <; .mine”无效
- SqlServer查询表中各列名称、表中列数
- vs2010下C++调用lib或dll文件
- [stm32] 一个简单的stm32vet6驱动2.4寸240X320的8位并口tft屏DEMO
- 让Windows新建UTF-8编码的文本文件
- Windows Store Apps, Error: The certificate specified has expired.(转)
- SQL - 批量修改表中所有行数据某字段的部分内容
- java中获得jar包执行路径的方法
- Xcode中不用Storyboard,用纯xib创建TabBar模式视图
- 最简单的基于FFmpeg的AVDevice例子(屏幕录制)
- [IOT] 自制蓝牙工牌办公室定位系统 (一)—— 阿里物联网平台概览及打通端到云(硬核&#183;干货)
- Chapter_4_JAVA作业
- 16.The Effect of Advertisement 广告的影响
- Linux删除软链接
- windows 重装系统
- day5 列表
- doctype和Quirks模式
- iOS开发--libxml/HTMLparser.h file not found 解决方法 (libxml.dylib错误处理)
- PHP学习必读的20本书
- 史上最简单的SpringCloud教程 | 第十二篇: 断路器监控(Hystrix Dashboard)(Finchley版本)
热门文章
- linux命令(001) -- chkconfig
- 涨知识---IV
- canvas杂记
- 4th 循环结构概述和for语句的格式及其使用
- 神经网络图灵机(Neural Turing Machines, NTM)
- 【VHDL】深度讲解二进制无符号和有符号加法处理溢出的问题
- HDU_3308_线段树_区间合并
- HDU_5734_数学推公式
- java_randomAccessFile类的使用
- 关于在win7旗舰版32位上 安装 net4.0 的闪退问题研究 和安装sqlserver2008问题