Re: questions about $_SERVER

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 11 Mar 2012, at 01:43, Tedd Sperling wrote:

> On Mar 10, 2012, at 3:53 PM, tamouse mailing lists wrote:
>> On Sat, Mar 10, 2012 at 9:37 AM, Tedd Sperling <tedd.sperling@xxxxxxxxx> wrote:
>>> That's correct, but to access those variables outside of their scope (such as a function) you do via a SuperGlobal, namely $GLOBAL['whatever'].
>>> 
>>> As such, there are no "globals" in PHP other than SuperGlobals. As I said, if I'm wrong, please show me otherwise.
>> 
>> I guess I don't know what you mean by "globals". I know what globals
>> are, but not "globals".
> 
> I don't understand your question. I know what questions are, but not your question. :-)

I think the confusion is arising because the word superglobal is used in PHP when referring to globals, because the word global has been incorrectly applied for quite some time.

A global variable is a variable that is accessible in every scope, so Tedd is right… the only true globals in PHP are the superglobals. Here's an overview of the various scopes in PHP (I've probably missed some, but it's enough to make the point)…

<?php
  // Only visible when not in a function or class. The PHP manual calls
  // this the "global" scope: http://php.net/variables.scope
  $var1 = 'a';

  function funcB()
  {
    // Only visible inside this function.
    $var2 = 'b';
  }

  function funcB()
  {
    // This statement makes the variable from the top-level scope visible
    // within this function. Essentially this is the same as passing the
    // variable in to the function by reference.
    global $var1;
  }

  class classC
  {
    // Visible to methods in this class only.
    private $var3 = 'c';

    // Visible to methods in this class and methods in derived classes.
    protected $var4 = 'd';

    // Method visible in this class only.
    private methodA()
    {
      // Visible only inside this method.
      $var5 = 'e';
    }

    // Method visible in this class and methods in derived classes.
    protected methodB()
    {
      // See funcB()
      global $var1;
    }

    // Method visible on any instance of this class.
    public methodC()
    {
      // See funcB()
      global $var1;
    }
  }
?>

The global keyword allows you to expose a variable that has been defined at the top-level scope ($var1 in the above example) in the current scope. It does NOT create a global variable; the keyword is not an accurate reflection of what it does.

My guess is that calling the top-level scope "global" made sense when functions were the only other level of scope that existed. Now that we have yet more levels of scope it can be a bit confusing.

I hope this helps clear things up.

-Stuart

-- 
Stuart Dallas
3ft9 Ltd
http://3ft9.com/
-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php




[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux