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

この関数は、存在する場合は指定された配列からインデックスで指定された値を返し、存在しない場合はデフォルト値を返します。このメッセージを返す方法がわかりません

Notice: 未定義のインデックス: TagFilter_info2_system in F:\EclipseWorkspaces\Ramses\www\RamsesLib.php 行 1965

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=71721に関連する登録済みのバグ
https://bugs.php.net/bug.php?id=71695 であることがわかりました

回避策: $GLOBALS を引数として使用しないでください。ほとんどの場合、isset() 関数を使用できます。

于 2016-04-05T09:12:08.727 に答える