Bug #79647 [Com]: Conflict between $GLOBALS["now"] and $now

From: Date: Fri, 29 May 2020 08:05:22 +0000
Subject: Bug #79647 [Com]: Conflict between $GLOBALS["now"] and $now
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-227229@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=79647&edit=1

 ID:                 79647
 Comment by:         bugreports at gmail dot com
 Reported by:        murray at focus-computing dot com dot au
 Summary:            Conflict between $GLOBALS["now"] and $now
 Status:             Not a bug
 Type:               Bug
 Package:            Scripting Engine problem
 Operating System:   All
 PHP Version:        7.3.18
 Assigned To:        cmb
 Block user comment: N
 Private report:     N

 New Comment:

> The variable defined outside of a function or class is simply 
> a local variable outside of a function or class

to make it clear - it even is - but yoz have to replace "local" with "scope" and
$GLOBALS is to access variables in the global scope from functions/methods

it's all about scopes


Previous Comments:
------------------------------------------------------------------------
[2020-05-29 07:54:37] bugreports at gmail dot com

> I've been programming with PHP for about 15 years now. I've always 
> assumed the $GLOBALS was a reference to an array of variables 
> unrelated to the variables defined outside of functions and classes.

it's heroic to state that one did not understand lanuage basics withn 15 years of usage and
even proposes to change basic concepts

https://www.php.net/manual/en/reserved.variables.globals.php
https://www.php.net/manual/en/language.variables.scope.php

An associative array containing references to all variables which are currently defined in the
global scope of the script. The variable names are the keys of the array.

> The variable defined outside of a function or class is simply 
> a local variable outside of a function or class

nonsense - you had 15 years time to learn some basics like https://www.php.net/manual/en/language.variables.scope.php

frankly if you write $GLOBALÖS['foo'] or global $foo withina function is the same and
when you write $GLOBALS in the global scope you waste performance for no good reason (useless )

php > echo $GLOBALS['x'];
filename:       php shell code
function name:  (null)
number of ops:  4
compiled vars:  none
line     #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   1     0  E >   FETCH_R                      global              ~0      'GLOBALS'
         1        FETCH_DIM_R                                      ~1      ~0, 'x'
         2        ECHO                                                     ~1
   2     3      > RETURN                                                   null

branch: #  0; line:     1-    2; sop:     0; eop:     3; out0:  -2
path #1: 0,
php > echo $x;
filename:       php shell code
function name:  (null)
number of ops:  2
compiled vars:  !0 = $x
line     #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   1     0  E >   ECHO                                                     !0
   2     1      > RETURN                                                   null

branch: #  0; line:     1-    2; sop:     0; eop:     1; out0:  -2
path #1: 0,
php >

------------------------------------------------------------------------
[2020-05-28 23:49:12] requinix@php.net

> I would also like to propose that these should be treated as separate.  The
> variable defined outside of a function or class is simply a local variable
> outside of a function or class.
I have a counter-proposal for you:

Don't use $GLOBALS.

------------------------------------------------------------------------
[2020-05-28 23:22:22] murray at focus-computing dot com dot au

I've been programming with PHP for about 15 years now.  I've always assumed the $GLOBALS
was a reference to an array of variables unrelated to the variables defined outside of functions and
classes.

I would also like to propose that these should be treated as separate.  The variable defined outside
of a function or class is simply a local variable outside of a function or class.

------------------------------------------------------------------------
[2020-05-28 13:45:07] bugreports at gmail dot com

$GLOBALS["now"] and $now are the same variable in the global scope and there is no point
to write $GLOBALS at all outside functions

<?php
$GLOBALS["now"] = time();
print "Year is " . strftime("%Y", $GLOBALS["now"]) . "\n";
$now = new DateTime("now");
print "Year is " . strftime("%Y", $GLOBALS["now"]) . "\n";
?>

versus

<?php
test();
function test()
{
 $GLOBALS["now"] = time();
 print "Year is " . strftime("%Y", $GLOBALS["now"]) . "\n";
 $now = new DateTime("now");
 print "Year is " . strftime("%Y", $GLOBALS["now"]) . "\n";
}
?>

------------------------------------------------------------------------
[2020-05-28 13:08:28] cmb@php.net

Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to
report
a bug at http://bugs.php.net/how-to-report.php

See <https://www.php.net/manual/en/reserved.variables.globals.php>.

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


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=79647


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


Thread (9 messages)

« previous php.bugs (#227229) next »