PHP7: array_key_exists() - 出了点问题
PHP7: array_key_exists() - something is wrong
我在 PHP 7.0.4
中遇到这样的问题,同样的代码在 PHP 5.6.x
及更早的版本中工作正常:
function array_item(&$array,$key,$default=''){
/* next line has number 1965 in original source */
if(is_array($array) && array_key_exists($key,$array)) return $array[$key];
return $default;
}
该函数只是 returns 一个由给定数组的索引指定的值(如果存在),或者如果不存在则为默认值。我无法理解它如何 return 这条消息
Notice: Undefined index: TagFilter_info2_system in F:\EclipseWorkspaces\Ramses\www\RamsesLib.php on line 1965
如果我将 PHP 替换为旧版本,则一切正常。 PHP 7
中可能存在这么严重的错误,或者有人有其他想法吗?按值传递数组没有帮助。索引 "TagFilter_info2_system"
确实不存在。如果我调用函数 array_keys($array) 它 returns 索引数组然后不包含值 "TagFilter_info2_system"
.
现在我剥离了我的源代码并获得了干净的最小且可验证的示例:
<?php
$a=1;
if(array_key_exists("b", $GLOBALS)){
print "Yes, \"b\" is found in array_keys($GLOBALS) even it is not defined yet;<br>";
$tryToGet=$GLOBALS["b"]; // It returns error, index not found
}
print "Printing array_keys($GLOBALS):<br>";
print_r(array_keys($GLOBALS));
$b=1;
我发现这是一个已注册的错误
https://bugs.php.net/bug.php?id=71721
与
有关
https://bugs.php.net/bug.php?id=71695
解决方法:不要使用 $GLOBALS 作为参数,在大多数情况下您可以使用 isset() 函数
我在 PHP 7.0.4
中遇到这样的问题,同样的代码在 PHP 5.6.x
及更早的版本中工作正常:
function array_item(&$array,$key,$default=''){
/* next line has number 1965 in original source */
if(is_array($array) && array_key_exists($key,$array)) return $array[$key];
return $default;
}
该函数只是 returns 一个由给定数组的索引指定的值(如果存在),或者如果不存在则为默认值。我无法理解它如何 return 这条消息
Notice: Undefined index: TagFilter_info2_system in F:\EclipseWorkspaces\Ramses\www\RamsesLib.php on line 1965
如果我将 PHP 替换为旧版本,则一切正常。 PHP 7
中可能存在这么严重的错误,或者有人有其他想法吗?按值传递数组没有帮助。索引 "TagFilter_info2_system"
确实不存在。如果我调用函数 array_keys($array) 它 returns 索引数组然后不包含值 "TagFilter_info2_system"
.
现在我剥离了我的源代码并获得了干净的最小且可验证的示例:
<?php
$a=1;
if(array_key_exists("b", $GLOBALS)){
print "Yes, \"b\" is found in array_keys($GLOBALS) even it is not defined yet;<br>";
$tryToGet=$GLOBALS["b"]; // It returns error, index not found
}
print "Printing array_keys($GLOBALS):<br>";
print_r(array_keys($GLOBALS));
$b=1;
我发现这是一个已注册的错误
https://bugs.php.net/bug.php?id=71721
与
有关
https://bugs.php.net/bug.php?id=71695
解决方法:不要使用 $GLOBALS 作为参数,在大多数情况下您可以使用 isset() 函数