isset()无法正常工作

时间:2017-11-15 07:43:57

标签: php

为什么isset($_POST['string'])对于php 5.3和php 5.4的工作原理相同? 毕竟,文章http://php.net/manual/en/migration54.incompatible.php表示isset()现在的工作方式不同。

1 个答案:

答案 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的方式和空行为。