Question

How can I define a superglobal array in PHP?

I know that there is no way to do this. However I thought there might be some "brains" out there knowing about a workaround for it. Specifically I want to have an array on every .php file I have that has the same data. I also want to access it like this:

echo $_HANS["foo"];

or

if( isset($_HANS["foo"]) && !empty( $_HANS["foo"] ) ) // DO

Important for me is that I don't want to have a static class, where I have to access my members like this:

myClass::myVariable;

By now I have something like this, but I guess it's not really efficient:

define( 'HANS', serialize( array( 'FooKey' => 'FooData' ) ));

To access it I have to unserialize it. Storing the data in a variable and THEN I can work with the index-operators.

$_HANS = array();
foreach(unserialize(HANS) as $Key => $Data)
{
    $_HANS[$Key] = $Data;
}
echo $_HANS["FooKey"];

There must be a way to skip this whole foreach-stuff in every single file.

EDIT =======================================

Okay, so by now I have this little workaround, which should be a little more efficient, than including a whole new file. However I'm still listening for a better solution :)

I simply put this code above in a global function:

function getData()
{
    $_DATA = array();
    foreach( unserialize(HANS) as $Key => $Data )
    {
        $_DATA[$Key] = $Data;
    }
    return $_DATA;
}

An everything I have to do is to put this line of code in every .php-file:

$_HANS = getData();

The problem about php.ini is the compatibility with companies offering 'webhosting'. They often give you a predefined installation of Apache, PHP, MySQL and Perl (often: LAMP) and don't allow you to edit the php.ini file.

Was it helpful?

Solution

You can declare $myArray at the beginning of the script (you can use a prepend file), and then access it using $GLOBALS['myArray'] from any point after that.

OTHER TIPS

You can use the auto_prepend_file and auto_append_file configuration directive in php.ini, in which you can define marshalling and unmarshalling of whatever global variable. You still will need to do the serialization trick, but you can do it in one place without having to remember to include the handlers.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top