2016年6月7日 星期二

[PHP] empty() / isset() on String Offsets

一般判斷陣列是否有鍵約莫就是 array_key_exists()、empty()、isset()。 最近遇到的問題是,如果需要判斷多於兩層的鍵存不存在,會出現 Fatal error:

$a = '';
var_dump(empty($a['1']['2'])); // bool(true)
var_dump(isset($a['1']['2'])); // bool(false)
var_dump(empty($a['1']['2']['3'])); // PHP Fatal error:  Cannot use string offset as an array
var_dump(isset($a['1']['2']['3'])); // PHP Fatal error:  Cannot use string offset as an array

$a['1'] = '';
var_dump(empty($a['1']['2']['3'])); // bool(true)
var_dump(isset($a['1']['2']['3'])); // bool(false)
var_dump(empty($a['1']['2']['3']['4'])); // PHP Fatal error:  Cannot use string offset as an array
var_dump(isset($a['1']['2']['3']['4'])); // PHP Fatal error:  Cannot use string offset as an array

$a['1']['2'] = '';
var_dump(empty($a['1']['2']['3']['4'])); // bool(true)
var_dump(isset($a['1']['2']['3']['4'])); // bool(false)
var_dump(empty($a['1']['2']['3']['4']['5'])); // PHP Fatal error:  Cannot use string offset as an array
var_dump(isset($a['1']['2']['3']['4']['5'])); // PHP Fatal error:  Cannot use string offset as an array

但是如果有一個鍵不匹配,就不會發生問題:

$a['x'] = '';
var_dump(empty($a['1']['2']['3'])); // bool(true)
var_dump(isset($a['1']['2']['3'])); // bool(false)
var_dump(empty($a['1']['2']['3']['4'])); // bool(true)
var_dump(isset($a['1']['2']['3']['4'])); // bool(false)

$a['1']['y'] = '';
var_dump(empty($a['1']['2']['3']['4'])); // bool(true)
var_dump(isset($a['1']['2']['3']['4'])); // bool(false)
var_dump(empty($a['1']['2']['3']['4']['5'])); // bool(true)
var_dump(isset($a['1']['2']['3']['4']['5'])); // bool(false)

$a['x']['2'] = '';
var_dump(empty($a['1']['2']['3']['4'])); // bool(true)
var_dump(isset($a['1']['2']['3']['4'])); // bool(false)
var_dump(empty($a['1']['2']['3']['4']['5'])); // bool(true)
var_dump(isset($a['1']['2']['3']['4']['5'])); // bool(false)

[Java] Invalid HTTP method: PATCH

最近系統需要使用 Netty4,所以把衝突的 Netty3 拆掉,然後就出現了例外。 pom.xml <dependency> <groupId>com.ning</groupId> <artifactId>as...