is there a way to create my own custom superglobal variables like $_POST and $_GET?
11 Answers
Static class variables can be referenced globally, e.g.:
class myGlobals {
   static $myVariable;
}
function a() {
  print myGlobals::$myVariable;
}
- 3,530
 - 18
 - 17
 
- 
                    2You sir, made my day. But does it only work inside classes? Is there a way to do this outside a class? – Mauker Jun 18 '15 at 14:36
 
Yes, it is possible, but not with the so-called "core" PHP functionalities. You have to install an extension called runkit7: Installation
After that, you can set your custom superglobals in php.ini as documented here: ini.runkit.superglobal
- 1,684
 - 18
 - 34
 
- 449
 - 4
 - 4
 
- 
                    7This is the only answer on this question that actually answers it. The other ones are basically 'no, but you can do this instead'. +1, I wish it were higher. – Chiri Vulpes Mar 15 '15 at 11:13
 - 
                    For Swoole's HTTP Server, if we need to set Super Globals, runkit is also best use case there. – Fakhar Anwar Jul 24 '20 at 09:04
 
I think you already have it - every variable you create in global space can be accessed using the $GLOBALS superglobal like this:
// in global space
$myVar = "hello";
// inside a function
function foo() {
    echo $GLOBALS['myVar'];
}
- 44
 - 6
 
- 6,442
 - 17
 - 60
 - 78
 
- 
                    2What's the performance of using $GLOBALS array compared to simply using the variable itself? – Pacerier Jun 10 '13 at 15:46
 - 
                    1^ Same as any other nested array, it's essentially negligible. Having your own superglobal is appealing more for ease of use (less typing) and aesthetics. – simontemplar Nov 07 '13 at 01:40
 - 
                    1$GLOBALS are not SUPERglobals! Every global variable must be imported into a function scope using the `global` statement. Superglobals have no such limitation. – Cláudio Silva Oct 31 '18 at 16:50
 - 
                    @Cláudio Silva $GLOBALS are super globals according to [php.net](https://www.php.net/manual/en/language.variables.superglobals.php) Accessing $GLOBALS inside a function does work. – Marcus Nov 27 '20 at 22:43
 - 
                    What I meant was the variables accessible trough $GLOBALS are those that need to be imported explicitly via `global $varName` so they are not superglobals. Also, superglobal variables are not present on $GLOBALS. But the $GLOBALS array is, indeed, superglobal. – Cláudio Silva Sep 17 '21 at 18:06
 
   Class Registry {
 private $vars = array();
 public function __set($index, $value){$this->vars[$index] = $value;}
 public function __get($index){return $this->vars[$index];}
}
$registry = new Registry;
function _REGISTRY(){
    global $registry;
    return $registry;
}
_REGISTRY()->sampleArray=array(1,2,'red','white');
//_REGISTRY()->someOtherClassName = new className;
//_REGISTRY()->someOtherClassName->dosomething();
class sampleClass {
    public function sampleMethod(){
        print_r(_REGISTRY()->sampleArray); echo '<br/>';
        _REGISTRY()->sampleVar='value';
        echo _REGISTRY()->sampleVar.'<br/>';
    }
}
$whatever = new sampleClass;
$whatever->sampleMethod();
- 71
 - 1
 - 2
 
- 
                    5Adding a description to this answer would help people to understand what you have done. – starbeamrainbowlabs Sep 06 '16 at 10:37
 - 
                    This approach demonstrates the registry pattern and requires you to type `_REGISTRY()->` every time you want to access the variable for reading or writing. The sampleClass is a demonstration of reading and writing to the registry from within the scope of a function. Personally I'm not a fan of the registry pattern, despite resorting to it often, but I do enjoy having a dedicated class, not intended to be constructed, where I can store a bunch of static variables, as shown in the accepted answer. – Ultimater Nov 27 '18 at 05:33
 
One other way to get around this issue is to use a static class method or variable.
For example:
class myGlobals {
   public static $myVariable;
}
Then, in your functions you can simply refer to your global variable like this:
function Test()
{
 echo myGlobals::$myVariable;
}
Not as clean as some other languages, but at least you don't have to keep declaring it global all the time.
- 184
 - 1
 - 2
 
Not really. though you can just abuse the ones that are there if you don't mind the ugliness of it.
- 13,816
 - 9
 - 61
 - 81
 
You can also use the Environment variables of the server, and access these in PHP This is a good way to maybe store global database access if you own and exclusively use the server.
- 1,058
 - 13
 - 32
 
- 
                    1Note that this will only work for strings, and not complex data types like objects. – starbeamrainbowlabs Sep 06 '16 at 10:38
 
possible workaround with $GLOBALS:
file.php:
$GLOBALS['xyz'] = "hello";
any_included_file.php:
echo $GLOBALS['xyz'];
- 53,146
 - 19
 - 236
 - 237
 
- 
                    I don't think this answers the question. The point of a superglobal is that you can reference it without either `global` or `$GLOBALS`, so this is just two ways to access a normal global. – Matthijs Kooijman Apr 30 '19 at 14:38
 
One solution is to create your superglobal variable in a separate php file and then auto load that file with every php call using the auto_prepend_file directive.
something like this should work after restarting your php server (your ini file location might be different):
/usr/local/etc/php/conf.d/load-my-custom-superglobals.ini
auto_prepend_file=/var/www/html/superglobals.php
/var/www/html/superglobals.php
<?php
  $_GLOBALS['_MY_SUPER_GLOBAL'] = 'example';
/var/www/html/index.php
<?php
  echo $_MY_SUPER_GLOBAL;
- 19,314
 - 10
 - 61
 - 70
 
Actually, there is no direct way to define your own superglobal variables; But it's a trick that I always do to access simpler to my useful variables!
class _ {
    public static $VAR1;
    public static $VAR2;
    public static $VAR3;
}
Then I want to use:
function Test() {
    echo \_::$VAR2;
}
Notice: Don't forget to use \ before, If you want to use it everywhere you have a namespace too...
Enjoy...
- 981
 - 11
 - 14