关于isset的一点说明

  作者: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‘]));
时间: 2024-08-26 23:51:01

关于isset的一点说明的相关文章

empty与isset的一点使用体会

刚在做表单提交的时候,我想检验一下数据是否存在,并用var_dump函数看一下数据.首先看使用isset()的代码 //登录函数 function login(){ if(!isset($_POST)){ show($_POST); } else{ } $this->display(); } 输入数据后 点击登录的效果,什么都没显示 再看empty() 的代码及使用效果 //登录函数 function login(){ if(!empty($_POST)){ show($_POST); } el

PHP中isset(变量)和直接判断变量的区别

在变量为空字符串和布尔值false以及数值0时,isset全部返回true,直接判断全部返回false: $empty=''; echo (isset($empty)?'1':0);//1 echo '<br/>'; echo ($empty?'1':0);//0 $empty=false; echo (isset($empty)?'1':0);//1 echo '<br/>'; echo ($empty?'1':0);//0 $empty=0; echo (isset($empt

isset,empty,is_null的小知识点

<?php /** 对于初学者很多的时候不能很好的使用isset,empty,is_null对null,false等值的返回值做出正确的判断,在这里我通过学习自己总结了一点知识点,作为以后的知识点 */ //1.设定数据类型,举例常用到的类型 $a; $b = false; $c = ''; $d = 0; $e = null; $f = array(); //2.分别针对不同的函数进行测试以上的数据类型返回值,用var_dump()打印,print_r有区别的,项目中你就知道了! //2.1以

全新一点公益全返公益APP开发

全新一点公益科技开发,公益APP开发 公益软件开发 (一点公益江先生:185,2911,8412 一点公益全返, 一点公益平台开发. 一.一点公益系统是怎么玩的呢?   首先消费者注册成为一点公益的消费会员(公益信使),信使在任何一家已经入驻的商家那里进行消费,均可以参与"一点公益"消费fan利模式.   1.注册一点公益信使没有任何加盟条件和任何费用   2.注册一点公益信使之后便可以推荐别人注册成为一点公益信使   3.通过你注册的信使在公益联盟商家消费,你可以获得推荐人的激励收益

isset、is_null、empty的区别

版本:PHP 5.4 1.isset() :检测变量是否存在,测试如下: 1 $a = false; 2 $b = null; 3 $c; 4 $d = 0; 5 $e = true; 6 var_dump(isset($a)); 7 var_dump(isset($b)); 8 var_dump(isset($c)); 9 var_dump(isset($d)); 10 var_dump(isset($e)); 结果如图: 总结:当变量为null或未定义的情况下就会返回false:而当变量的值

关于重构工作的一点思考

最近两周一直忙着和重构相关的事情,本文将简要概述从开始制定重构方案,到具体执行的过程中遇到的问题,以及对重构的一点理性思考. 起因: 本系统是2015年11月开始建设,当时为了快速投入使用,大量的烂代码,后期一直保持快速前进,没有进行过实质性的重构. 具体表现: ● 分层不清,sql哪都有,dao有.service也有,就差controller没写了.同样dao也包含业务逻辑. ● sql用的是spring jdbc,并没有使用mybatis,导致sql写起来有些复杂,封装不够基本都是原始sql

做预解释题的一点小方法和小技巧

在JavaScript中的函数理解中预解释是一个比较难懂的话题.原理虽然简单,寥寥数言,但其内涵却有深意,精髓难懂.如何在轻松活跃的头脑中将它学会,现在针对我在学习中的一点小窍门给大家分享一下,希望能给大家一些帮助: 万事需遵循"原理"--"预解释"无节操和"this"指向:(可先看例题解析然后结合原理进行学习) (感谢蕾蕾老师给归纳的预解释无节操原理:) 如果函数传参数则先于以下执行,就相当于在函数私有作用域下var了一个变量:根据作用域原理,

关于继承和组合的一点总结

入行时一直用c++写端游的逻辑,对这两者的区别几乎是0. 最先意识到有不同是在看了设计模式之后,但也没啥自己想法,代码照旧,只是依稀有个印象:都说组合好,少用继承. 用c++的那段时间对这句经验是没多少感受的.后来用erlang.lua.go开始自己设计搭建基础框架,这才在编码层级感受到两者的巨大不同. 一个印象非常深的例子:上个手游项目MOBA大改造,首先要做个类似dota的开房间系统,5v5. 想想房间也就是个小号地图嘛,便着手把嵌在活动中的地图代码扣了出来.做成单独的功能类,LogicMa

关于Spring JDBC RowMapper的一点改进思路

[注]通常我们使用RowMapper(比如ParameterizedRowMapper),都需要定义好查询字段,如果使用别名就没办法了.还要比如加入group,或者联合查询,也不能够使用,除非不想要非主体Bean之外的字段,那么只能用Map接收返回结果了,或者直接实现RowMapper.基于这一点,提出一个稍微通用的解决思路:所有的Bean都继承一个基类Bean,里面放一个Map(就是存放那些Bean没有指定的字段了,比如sum.count.avg - 各种查询字段或者别名),参考BeanPro