создать суперглобальные переменные в php? - PullRequest
56 голосов
/ 07 мая 2009

Есть ли способ создать мои собственные суперглобальные переменные, такие как $ _POST и $ _GET?

Ответы [ 9 ]

47 голосов
/ 07 мая 2009

На статические переменные класса можно ссылаться глобально, например ::10000

class myGlobals {

   static $myVariable;

}

function a() {

  print myGlobals::$myVariable;

}
28 голосов
/ 13 мая 2014

Да, это возможно, но не с так называемыми «основными» функциями PHP. Вы должны установить расширение под названием runkit: http://www.php.net/manual/en/runkit.installation.php

После этого вы можете установить свои собственные суперглобалы в php.ini, как описано здесь: http://www.php.net/manual/en/runkit.configuration.php#ini.runkit.superglobal

18 голосов
/ 07 мая 2009

Я думаю, что у вас уже есть - каждая переменная, которую вы создаете в глобальном пространстве, может быть доступна с помощью $ GLOBALS suberglobal следующим образом:

// in global space
$myVar = "hello";

// inside a function
function foo() {
    echo $GLOBALS['myVar'];
}
6 голосов
/ 23 сентября 2011

Еще один способ обойти эту проблему - использовать метод или переменную статического класса.

Например:

class myGlobals {

   public static $myVariable;

}

Затем в своих функциях вы можете просто ссылаться на свою глобальную переменную следующим образом:

function Test()
{
 echo myGlobals::$myVariable;
}

Не так чисто, как некоторые другие языки, но, по крайней мере, вам не нужно постоянно объявлять его глобальным.

5 голосов
/ 08 мая 2011
   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();
3 голосов
/ 25 сентября 2013
нет

Нет

В этом руководстве перечислены только встроенные суперглобальные элементы

3 голосов
/ 07 мая 2009

Не совсем. хотя вы можете просто оскорбить тех, кто там, если не возражаете против уродства.

1 голос
/ 07 мая 2009

Вы также можете использовать переменные среды сервера и обращаться к ним в PHP Это хороший способ сохранить глобальный доступ к базе данных, если вы владеете и используете исключительно сервер.

0 голосов
/ 23 декабря 2017

возможный обходной путь с $GLOBALS:

file.php:

$GLOBALS['xyz'] = "hello";

any_included_file.php:

echo $GLOBALS['xyz'];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...