|
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: Sun Dec 14 10: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)