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