PHP7: 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;
}

Функция просто возвращает значение, указанное индексом из данного массива, если существует, или значение по умолчанию, если не существует. Я не могу понять, как он может вернуть это сообщение

Примечание: неопределенный индекс: TagFilter_info2_system в F: \ EclipseWorkspaces \ Ramses \ www \ RamsesLib.php в строке 1965

Если я заменю 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;

2

Решение

Я обнаружил, что это зарегистрированная ошибка
https://bugs.php.net/bug.php?id=71721

относится к
https://bugs.php.net/bug.php?id=71695

Обходной путь: не используйте $ GLOBALS в качестве аргумента, в большинстве случаев вы можете использовать функцию isset ()

2

Другие решения

Других решений пока нет …