为什么isset($_POST['string'])
对于php 5.3和php 5.4的工作原理相同?
毕竟,文章http://php.net/manual/en/migration54.incompatible.php表示isset()现在的工作方式不同。
答案 0 :(得分:1)
正如描述所说:
非数字字符串偏移 - 例如$ a ['foo']其中$ a是一个字符串 - 现在在isset()上返回false,在empty()上返回true,如果你尝试使用它们则产生一个E_WARNING。
double,bool和null类型的偏移产生E_NOTICE。
数字字符串(例如$ a ['2'])仍然像以前一样工作。请注意,“12.3”和“5 foobar”之类的偏移被视为非数字并产生E_WARNING,但由于向后兼容性原因,它们分别转换为12和5。
注意:以下代码返回不同的结果。
$str='abc';var_dump(isset($str['x']));
// false for PHP 5.4 or later, but true for 5.3 or less
仅对作为char数组处理的字符串进行更改。例如:
$test = "str";
等于
$test = ['s','t','r'];
使用索引访问时。
在PHP 5.4之前,
$test[2] will return 'r'
$test["2"] will also return 'r'
$test[2.3] will also return 'r'
$test["a"] will return false
isset($test["a"]) will return true
empty($test["a"]) will return false
PHP 5.4之后
$test[2] will return 'r'
$test["2"] will also return 'r'
$test[2.3] will also return 'r', but with a warning
$test["a"] will return false and produce a warning
isset($test["a"]) will return false
empty($test["a"]) will return true
所以,
$_POST
是一个真正的数组,而string
是一个真正的键,它没有改变isset的方式和空行为。