Как объявить глобальную переменную в php?

У меня есть код примерно так:

<? $a="localhost"; function body(){ global $a; echo $a; } function head(){ global $a; echo $a; } function footer(){ global $a; echo $a; } ?> 

есть ли способ определить глобальную переменную в одном месте и сделать переменную $a доступной во всех функциях сразу? без использования global $a; Больше?

Вместо этого можно использовать массив $GLOBALS :

 $GLOBALS['a'] = 'localhost'; function body(){ echo $GLOBALS['a']; } 

Из руководства :

Ассоциативный массив, содержащий ссылки на все переменные, которые в настоящее время определены в глобальной области действия сценария. Имена переменных – это ключи массива.


Если у вас есть набор функций, которым нужны некоторые общие переменные, класс со свойствами может быть хорошим выбором, а не глобальным:

 class MyTest { protected $a; public function __construct($a) { $this->a = $a; } public function head() { echo $this->a; } public function footer() { echo $this->a; } } $a = 'localhost'; $obj = new MyTest($a); 

Если переменная не изменится, вы можете использовать define

Пример:

 define('FOOTER_CONTENT', 'Hello I\'m an awesome footer!'); function footer() { echo FOOTER_CONTENT; } 

Добавьте переменные в супер глобальный массив $ GLOBALS, например

 $GLOBALS['variable'] = 'localhost'; 

и использовать его во всем мире

или вы можете использовать константу, доступную по всему сценарию

 define('HOSTNAME', 'localhost'); 

Вы ответили так, как вы написали вопрос – используйте «define». но после установки вы не можете изменить определение.

Кроме того, есть трюки с константой в классе, такие как class :: constant, которые вы можете использовать. Вы также можете сделать их переменными, объявив статические свойства классу, с функциями для установки статического свойства, если вы хотите его изменить.

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

 define("myconstant", "value"); class globalVars { static $a = false; static $b = 0; static $c = array('first' => 2, 'second' => 5); } function test($num) { if (!globalVars::$a) { $returnVal = 'The ' . myconstant . ' of ' . $num . ' plus ' . globalVars::$b . ' plus ' . globalVars::$c['second'] . ' is ' . ($num + globalVars::$b + globalVars::$c['second']) . '.'; globalVars::$a = true; } else { $returnVal = 'I forgot'; } return $returnVal; } echo test(9); ---> The value of 9 + 0 + 5 is 14. echo "<br>"; echo globalVars::$a; ----> 1 

static ключевые слова должны присутствовать в классе else, а vars $ a, $ b и $ c не будут находиться в глобальном масштабе.

Вы можете попробовать использовать ключевое слово в функциях Closure или Lambdas, если это соответствует вашему намерению … PHP 7.0. Это не лучше, а просто альтернатива.

 $foo = "New"; $closure = (function($bar) use ($foo) { echo "$foo $bar"; })("York"); 

демо | Информация

Переменная, объявленная вне функции, имеет GLOBAL SCOPE и может быть доступна только вне функции

 <?php global $a; $a=10; echo $a; function xl($a){ echo "in the function".$a." <br/>"; } echo "in outside ".$a."<br/>"; xl($a); ?> 

Вам больше не следует использовать глобальные переменные, они недоступны в PHP 5.4.