globals and super globals

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • John

    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.

  • Michael Fesser

    #2
    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

    Comment

    • Ewoud Dronkert

      #3
      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/

      Comment

      • rushi.v@gmail.com

        #4
        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

        Comment

        • Colin McKinnon

          #5
          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.

          Comment

          • John

            #6
            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]

            Comment

            • Wayne

              #7
              Re: globals and super globals

              On Fri, 25 Feb 2005 13:41:08 +0000, John <john.walsh@min i-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,

              Comment

              • Chung Leong

                #8
                Re: globals and super globals

                "John" <john.walsh@min i-net.co.uk> wrote in message
                news:111ua6qbrd 0ul21@corp.supe rnews.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.


                Comment

                Working...