2

我有这样的问题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) 它返回索引数组然后不包含 value "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;
4

1 回答 1

3

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

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

于 2016-04-05T09:12:08.727 回答