Connecting Tech Pros Worldwide Help | Site Map

globals and super globals

John
Guest
 
Posts: n/a
#1: Jul 17 '05

Hi,

I'm looking for the best way to deal with globals in PHP.

As a 'C' software developer, I would normally avoid all
globals and not have any at all, but use structs and pass
everything in the function parameters...

However, being realistic, I can see that globals can (and
do ?) have a place in PHP web scripts.


As I see it, there are two approaches:

1) go with globals,

2) avoid globals.


Looking at (1)
==============

Sure, I can just put a 'global $a' at the start of every
function that requires the use of the global '$a', but its
an easy mistake to forget this, and would not cause an error
('$a' will be read as NULL).

So, is there a way for a script to declare that a variable
should be a 'superglobal', just like $_SERVER is.

If not - could this be a useful addition to PHP ?


Looking at (2)
==============

If I put all my globals into an array/hashtable, eg.

$superglobal['a'] = 'hello world';

then this emulates the idea of a 'struct' in 'C', and I can
pass it through all my functions (or not bother with doing
that and use it as my one and only global).


Questions
=========

I prefer the idea of (2), but I wonder if its just going too
far ? Would anyone suggest what the prefered way of having and
using globals is ?

Could 'SUPERGLONAL' be added to PHP, to decalre a variable to be
superglobal ?

All thoughts welcome...

John.

Michael Fesser
Guest
 
Posts: n/a
#2: Jul 17 '05

re: globals and super globals


.oO(John)
[color=blue]
>Sure, I can just put a 'global $a' at the start of every
>function that requires the use of the global '$a', but its
>an easy mistake to forget this, and would not cause an error
>('$a' will be read as NULL).[/color]

PHP will show a notice when attempting to read an unitialized variable.
This requires error_reporting set to E_ALL, which is not the default,
but a _must_ on a development system.

Another option to avoid globals could be OOP.

Micha
Ewoud Dronkert
Guest
 
Posts: n/a
#3: Jul 17 '05

re: globals and super globals


On Fri, 25 Feb 2005 13:41:08 +0000, John wrote:[color=blue]
> If I put all my globals into an array/hashtable, eg.[/color]

You could use $_SESSION for that. Not sure if it requires a
session_start() though, never used it without.

--
Firefox Web Browser - Rediscover the web - http://getffox.com/
Thunderbird E-mail and Newsgroups - http://gettbird.com/
rushi.v@gmail.com
Guest
 
Posts: n/a
#4: Jul 17 '05

re: globals and super globals


As a C developer myself I don't like the use of globals, so i just pass
the variables into a function. A lot of my code is split up into
functions so I don't have much of a problem.

But #2 is pretty good too.

Rushi

Colin McKinnon
Guest
 
Posts: n/a
#5: Jul 17 '05

re: globals and super globals


John wrote:
[color=blue]
>
> Hi,
>[/color]
Hi yerself,
[color=blue]
>
> Could 'SUPERGLONAL' be added to PHP, to decalre a variable to be
> superglobal ?
>[/color]

Already there. Only it's called $GLOBALS

C.
John
Guest
 
Posts: n/a
#6: Jul 17 '05

re: globals and super globals


Colin,

$GLOBALS is just a list of your global variables - it does not
make them 'superglobal'.

John.
[color=blue][color=green]
>>Could 'SUPERGLONAL' be added to PHP, to decalre a variable to be
>>superglobal ?
>>[/color]
>
>
> Already there. Only it's called $GLOBALS
>
> C.[/color]

Wayne
Guest
 
Posts: n/a
#7: Jul 17 '05

re: globals and super globals


On Fri, 25 Feb 2005 13:41:08 +0000, John <john.walsh@mini-net.co.uk>
wrote:
[color=blue]
>Sure, I can just put a 'global $a' at the start of every
>function that requires the use of the global '$a', but its
>an easy mistake to forget this, and would not cause an error
>('$a' will be read as NULL).[/color]

As others have mentioned, if you set your error level high enough
(E_ALL) than you'll get notices for any undefined variable accesses.
But that's still not the greatest solution.

Whenever I use globals I always use the $GLOBALS array and not the
global keyword.

In PHP5, I don't use "globals" at all instead I use static class
variables which avoids all these scoping issues.
[color=blue]
>I prefer the idea of (2), but I wonder if its just going too
>far ?[/color]

Seriously, you want to use objects and classes. You can avoid using
globals for nearly everything if your project is propertly organized
into classes. I have a HUGE project and I generally only use globals
for temporary caching.
[color=blue]
>Would anyone suggest what the prefered way of having and
>using globals is ?[/color]

I believe the $GLOBALS array is preferred over the global keyword. In
fact, I haven't used the global keyword in a very a long time.

Later,

Chung Leong
Guest
 
Posts: n/a
#8: Jul 17 '05

re: globals and super globals


"John" <john.walsh@mini-net.co.uk> wrote in message
news:111ua6qbrd0ul21@corp.supernews.com...[color=blue]
> Questions
> =========
>
> I prefer the idea of (2), but I wonder if its just going too
> far ? Would anyone suggest what the prefered way of having and
> using globals is ?
>
> Could 'SUPERGLONAL' be added to PHP, to decalre a variable to be
> superglobal ?[/color]

You can't create your own superglobal, though what you can do is hijack one
of the existing ones:

$_ENV = $mystuff;

Not a civil way to program though.

Being an old timer, I consider superglobals sacrilegious. The global keyword
was one of PHP's key innovations. The language actually discourages you from
using global variable.


Closed Thread