создание суперглобальных переменных в php?



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

410   9  
PHP

9 ответов:

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

class myGlobals {

   static $myVariable;

}

function a() {

  print myGlobals::$myVariable;

}

Да, это возможно, но не с так называемыми "основными" функциями 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

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

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

// inside a function
function foo() {
    echo $GLOBALS['myVar'];
}

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

например:

class myGlobals {

   public static $myVariable;

}

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

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

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

   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();

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

нет

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

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

еще один возможный трюк с $GLOBALS при необходимости в небольших проектах:

.php: (где вы определяете свой "супер-глобальный")

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

any_included_file.php:

global $xyz;  //only once enough in the start of the file/method
...
...
...
...
...
echo $xyz;

Comments

    Ничего не найдено.