关于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']));

转载于:https://www.cnblogs.com/llguanli/p/6939741.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值