Bug #79647 [Nab]: Conflict between $GLOBALS["now"] and $now
| From: | cmb@php.net | Date: | Fri, 29 May 2020 08:15:27 +0000 |
| Subject: | Bug #79647 [Nab]: Conflict between $GLOBALS["now"] and $now | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-227230@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
Updated by: cmb@php.net
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:
Thanks.
Previous Comments:
------------------------------------------------------------------------
[2020-05-29 08:05:22] bugreports at gmail dot com
> 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
------------------------------------------------------------------------
[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";
}
?>
------------------------------------------------------------------------
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