Bug #78475 [Com]: Unsetting or assigning a value to $GLOBALS makes it stop working

From: Date: Wed, 14 Apr 2021 10:05:09 +0000
Subject: Bug #78475 [Com]: Unsetting or assigning a value to $GLOBALS makes it stop working
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-233424@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=78475&edit=1

 ID:                 78475
 Comment by:         mexygarewal20 at gmail dot com
 Reported by:        ayg at aryeh dot name
 Summary:            Unsetting or assigning a value to $GLOBALS makes it
                     stop working
 Status:             Open
 Type:               Bug
 Package:            Scripting Engine problem
 PHP Version:        7.3.9
 Block user comment: N
 Private report:     N

 New Comment:

Really informative and inoperative, Thanks for the post and effort! Please keep sharing more such
blog. 
I have been looking for this information for quite some times. Will look around your website. http://mexygarewal.in/  
http://mexygarewal.in/Udaipur-escorts.html


Previous Comments:
------------------------------------------------------------------------
[2019-08-29 18:14:51] ayg at aryeh dot name

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)


------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=78475&edit=1


Thread (4 messages)

« previous php.bugs (#233424) next »