globals and super globals

This is a discussion on globals and super globals within the PHP Language forums, part of the PHP Programming Forums category; Hi, I'm looking for the best way to deal with globals in PHP. As a 'C' software developer, I ...


Go Back   Usenet Forums > PHP Programming Forums > PHP Language

FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 02-25-2005
John
 
Posts: n/a
Default globals and super globals


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.

Reply With Quote
  #2 (permalink)  
Old 02-25-2005
Michael Fesser
 
Posts: n/a
Default Re: globals and super globals

.oO(John)

>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).


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
Reply With Quote
  #3 (permalink)  
Old 02-25-2005
Ewoud Dronkert
 
Posts: n/a
Default Re: globals and super globals

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


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/
Reply With Quote
  #4 (permalink)  
Old 02-25-2005
rushi.v@gmail.com
 
Posts: n/a
Default 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

Reply With Quote
  #5 (permalink)  
Old 02-25-2005
Colin McKinnon
 
Posts: n/a
Default Re: globals and super globals

John wrote:

>
> Hi,
>

Hi yerself,

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


Already there. Only it's called $GLOBALS

C.
Reply With Quote
  #6 (permalink)  
Old 02-25-2005
John
 
Posts: n/a
Default Re: globals and super globals

Colin,

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

John.

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

>
>
> Already there. Only it's called $GLOBALS
>
> C.


Reply With Quote
  #7 (permalink)  
Old 02-25-2005
Wayne
 
Posts: n/a
Default Re: globals and super globals

On Fri, 25 Feb 2005 13:41:08 +0000, John <john.walsh@mini-net.co.uk>
wrote:

>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).


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.

>I prefer the idea of (2), but I wonder if its just going too
>far ?


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.

>Would anyone suggest what the prefered way of having and
>using globals is ?


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,

Reply With Quote
  #8 (permalink)  
Old 02-26-2005
Chung Leong
 
Posts: n/a
Default Re: globals and super globals

"John" <john.walsh@mini-net.co.uk> wrote in message
news:111ua6qbrd0ul21@corp.supernews.com...
> 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 ?


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.


Reply With Quote
Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are Off
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On




All times are GMT +1. The time now is 10:38 AM.


Powered by vBulletin® Version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.0.0