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 ...
|
|||||||
| FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
|
|||
|
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. |
|
|||
|
.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 |
|
|||
|
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/ |
|
|||
|
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. |
|
|||
|
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, |
|
|||
|
"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. |