Bug #68110 [Opn]: undefined variable error not being triggered for undefined array index
[email protected] ("mathiasgrimm at gmail dot com")
| Newsgroups | php.standards |
|---|---|
| Message-ID | <[email protected]> |
Edit report at https://bugs.php.net/bug.php?id=68110&edit=1
ID: 68110
User updated by: mathiasgrimm at gmail dot com
Reported by: mathiasgrimm at gmail dot com
Summary: undefined variable error not being triggered for
undefined array index
Status: Open
Type: Bug
Package: PHP Language Specification
Operating System: OSX, Windows, Linux
-PHP Version: 5.5.17
+PHP Version: 5.5, 5.4
Block user comment: N
Private report: N
New Comment:
Discovered this problem when using the @ sign to suppress errors when trying to access an undefined array index and checking the $php_errormsg but for my surprise that never happens if the assigned value is NULL... and according to the documentation this should happen.
I was implementing an array_key_exist_recursive ...
public static function exists($mIndex, $aSource)
{
$aPath = explode(self::$sSeparator, $mIndex);
$sEval = "\$bExists = @\$aSource['" . implode("']['", $aPath) . "'];";
eval($sEval);
return !isset($php_errormsg);
}
Previous Comments:
------------------------------------------------------------------------
[2014-09-26 21:25:29] mathiasgrimm at gmail dot com
actually the expected result is Undefined index: b... or to have the variable $php_errormsg defined.
------------------------------------------------------------------------
[2014-09-26 21:24:03] mathiasgrimm at gmail dot com
Description:
------------
according to the manual(http://ie1.php.net/manual/en/language.types.array.php):
Note:
Attempting to access an array key which has not been defined is the same as accessing any other undefined variable: an E_NOTICE-level error message will be issued, and the result will be NULL.
Test script:
---------------
$a ['a'] = null;
$tmp = $a['a']['b']; // nothing
$tmp = $a['a']['b']['c']; // nothing
// this works (throw an E_NOTICE) fine
$a ['a'] = array();
$tmp = $a['a']['b']; // Undefined index: b
$tmp = $a['a']['b']['c']; // Undefined index: b
Expected result:
----------------
assert(isset($php_errormsg) === true);
Actual result:
--------------
Undefined index: b
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=68110&edit=1