Bug #68110 [Opn]: undefined variable error not being triggered for undefined array index

From: Date: Fri, 26 Sep 2014 21:34:52 +0000
Subject: Bug #68110 [Opn]: undefined variable error not being triggered for undefined array index
References: 1  Groups: php.standards 
Request: Send a blank email to standards-+get-467@lists.php.net to get a copy of this message
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

« previous php.standards (#467) next »