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