From:             [EMAIL PROTECTED]
Operating system: Linux
PHP version:      4.3.0
PHP Bug Type:     Scripting Engine problem
Bug description:  NOTICE error reporting fails when an undeclared var is global within 
function

Hi,

I've turned error_reporting() to die() the execution of my scripts as soon
as any error, warning, notice, etc is encountered. 

Yet, in the example global_test() function below,
$some_undefined_variable, which is never set, is declared global, and
$another_undefined_variable is never set and isn't declared global.
isset() returns false on both variables, yet only the line "print
$another_undefined_variable;" triggers an error.

Here's the code:
-----------------------
<? 

function allErrorsFatal ($errno, $errstr, $errfile, $errline) {
  global $ERROR_STR;
  echo "<b>Error</b> [" . $ERROR_STR[$errno] . "] $errstr<br>\n";
  echo "Fatal error in line ".$errline." of file ".$errfile."<br>";
  exit -1;
  break;
} 

$ERROR_STR = array(1 => 'ERROR', 2 => 'WARNING', 4 => 'PARSE',
                   8 => 'NOTICE', 16 => 'CORE_ERROR', 32 =>
'CORE_WARNING',
                   64 => 'COMPILE_ERROR', 128 => 'COMPILE_WARNING', 256 =>
'USER_ERROR',
                   512 => 'USER_WARNING', 1024 => 'USER_NOTICE');

error_reporting (E_ALL);
set_error_handler("allErrorsFatal");


function global_test() {
        global $some_undefined_variable;
        if (isset($some_undefined_variable)) {
                print "some_undefined_variable is set - \n";
        } else {
                print "some_undefined_variable is not set - \n";
        }
        print $some_undefined_variable;
        if (isset($another_undefined_variable)) {
                print "another_undefined_variable is set - \n";
        } else {
                print "another_undefined_variable is not set - \n";
        }
        print $another_undefined_variable;
}

global_test();

?>
---------------------------


Outputs:
---------------------------
some_undefined_variable is not set - 
another_undefined_variable is not set - 
<b>Error</b> [NOTICE] Undefined variable:  another_undefined_variable<br>
Fatal error in line 33 of file /[...]/global_test.php<br>
---------------------------


IMHO, the line "print $some_undefined_variable;" should trigger the
notice. Apparently, the global keyword incorrectly affects the way
$some_undefined_variable is handled by the parser later on.

-Kai Schutte
-- 
Edit bug report at http://bugs.php.net/?id=22080&edit=1
-- 
Try a CVS snapshot:         http://bugs.php.net/fix.php?id=22080&r=trysnapshot
Fixed in CVS:               http://bugs.php.net/fix.php?id=22080&r=fixedcvs
Fixed in release:           http://bugs.php.net/fix.php?id=22080&r=alreadyfixed
Need backtrace:             http://bugs.php.net/fix.php?id=22080&r=needtrace
Try newer version:          http://bugs.php.net/fix.php?id=22080&r=oldversion
Not developer issue:        http://bugs.php.net/fix.php?id=22080&r=support
Expected behavior:          http://bugs.php.net/fix.php?id=22080&r=notwrong
Not enough info:            http://bugs.php.net/fix.php?id=22080&r=notenoughinfo
Submitted twice:            http://bugs.php.net/fix.php?id=22080&r=submittedtwice
register_globals:           http://bugs.php.net/fix.php?id=22080&r=globals
PHP 3 support discontinued: http://bugs.php.net/fix.php?id=22080&r=php3
Daylight Savings:           http://bugs.php.net/fix.php?id=22080&r=dst
IIS Stability:              http://bugs.php.net/fix.php?id=22080&r=isapi
Install GNU Sed:            http://bugs.php.net/fix.php?id=22080&r=gnused

Reply via email to