您的位置:首页

关于isset的一点说明

2017-06-04 10:38 183 查看
作者: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']));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: