| 
        php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login | 
 PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits             
             [2021-04-14 10:08 UTC] nikic@php.net
 
-Status:      Open
+Status:      Closed
-Assigned To:
+Assigned To: nikic
  [2021-04-14 10:08 UTC] nikic@php.net
  | 
    |||||||||||||||||||||||||||
            
                 
                Copyright © 2001-2025 The PHP GroupAll rights reserved.  | 
        Last updated: Tue Nov 04 00:00:01 2025 UTC | 
Description: ------------ $GLOBALS contains a reference to a magical array that has all the globals in it. Unsetting or assigning a value to it seems to forevermore lose the reference to this magical array, making $GLOBALS a regular old variable that has no connection to defined globals (although it's still a superglobal). Unsetting or assigning to $GLOBALS probably should fail, just like $this does. I spent some time today trying to debug a scenario where $GLOBALS['someVar'] did not equal $someVar after I had written "global $someVar". It turned out to be because someone had unset $GLOBALS somewhere (they were trying to clear all global variables and restore them to an earlier state). This is really confusing and should be disallowed. Or at least produce a notice or something. Test script: --------------- $a = 1; unset( $GLOBALS ); function f() { global $a; unset( $GLOBALS ); // $GLOBALS = []; is the same var_dump( $a ); var_dump( isset( $GLOBALS['a' ) ); } f(); Expected result: ---------------- Either: int(1) bool(true) Or: NULL bool(false) Actual result: -------------- int(1) bool(false)