PHP7:array_key_exists() - 出了点问题

时间:2016-03-29 09:20:40

标签: php php-7 array-key-exists

我在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;
  }

该函数只返回指定数组中索引指定的值(如果存在),如果不存在,则返回默认值。我无法理解它是如何返回此消息的

  

注意:未定义的索引:1965行的F:\ EclipseWorkspaces \ Ramses \ www \ RamsesLib.php中的TagFilter_info2_system

如果我用旧版本替换PHP,那么一切正常。可能PHP 7中存在如此糟糕的错误,或者有其他想法吗?按值传递数组并没有帮助。索引"TagFilter_info2_system"确实不存在。如果我调用函数array_keys($ array),它返回索引数组,然后不包含值"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;

1 个答案:

答案 0 :(得分:2)

我发现这是一个注册的bug https://bugs.php.net/bug.php?id=71721
与...有关 https://bugs.php.net/bug.php?id=71695

解决方法:不要使用$ GLOBALS作为参数,在大多数情况下你可以使用isset()函数