issetについての少しの説明
7281 ワード
:zhanhailiang :2014-10-08
今日は奇妙なバグに遭遇しました.テストは以下の通りです.
<?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']));