Создать и использовать глобальную переменную без ключевого слова «global»?

На данный момент я создаю такую ​​переменную в файле, который загружен на всех страницах:

<?php add_action( 'parse_query', 'my_global_vars' ); function my_global_vars() { /* CUSTOM GLOBAL VARIABLES */ $variable_name = get_query_var('category_name'); } ?> 

И каждый раз, когда я хочу использовать его (в других файлах), я должен сделать это следующим образом:

 <?php global $variable_name; if( $variable_name = 'news' ){ // Do something } ?> 

И когда мне нужно использовать переменную несколько раз в том же файле, я добавляю global $variable_name; в верхней части файла и просто используйте $variable_name в остальных экземплярах.

Но по мере увеличения числа переменных мне становится сложнее управлять списком global $variable_name в верхней части всех файлов.

Есть ли способ определить переменную как глобальную во время создания и просто использовать $variable_name везде?

EDIT: Один из способов – определить переменную следующим образом:

 <?php add_action( 'parse_query', 'my_global_vars' ); function my_global_vars() { /* CUSTOM GLOBAL VARIABLES */ global $variable_name; $variable_name = get_query_var('category_name'); } ?> 

И используйте его, как используя $GLOBALS[] как этот $GLOBALS['variable_name'] другом месте.

Related of "Создать и использовать глобальную переменную без ключевого слова «global»?"

Наличие большого количества глобальных варов обычно плохое. Это становится беспорядком очень быстро.

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

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

 global $variable_name; do_something_with($variable_name); 

такой же как

 do_something_with($GLOBALS['variable_name']); 

Вы можете использовать для этого статический класс и сохранить его ООП:

 <?php class GlobalVariables { private static $vars = array(); public static function get($name, $default = null) { return (isset(self::$vars[$name]) ? self::$vars[$name] : $default); } public static function set($name, $value) { self::$vars[$name] = $value; } } function foo() { GlobalVariables::set('foo', 'oof'); } function bar() { var_dump( GlobalVariables::get('foo') ); } foo(); bar(); //oof ?> 

DEMO


Кроме того, вы можете использовать шаблон Singleton:

 <?php class GlobalVariables { private static $instance; private $vars = array(); public static function get() { if (empty(self::$instance)) { self::$instance = new GlobalVariables(); } return self::$instance; } public function __get($name) { return (isset($this->vars[$name]) ? $this->vars[$name] : null); } public function __set($name, $value) { $this->vars[$name] = $value; } } function foo() { GlobalVariables::get()->foo = 'oof'; } function bar() { var_dump( GlobalVariables::get()->foo ); } foo(); bar(); //oof ?> 

ДЕМО .

Используйте то, что вы считаете наиболее читаемым.

 GlobalVariables::set('key', 'value'); GlobalVariables::get('key'); 

или

 GlobalVariables::get()->key = 'value'; GlobalVariables::get()->key; 

Вполне альтернативно, если вы ненавидите динамичность, просто используйте статические переменные (это, однако, требует, чтобы вы заранее создали все переменные):

 <?php class GlobalVariables { public static $foo; } GlobalVariables::$foo = 'oof'; var_dump( GlobalVariables::$foo ); ?> 

Использование global внешней функции не делает ничего. Он предназначен для внутренних функций. Вы можете просто удалить свои global заявления.

Изменить: я предлагаю вам уменьшить количество глобальных переменных, которые вы создали, структурируя их. Группируйте их в массивы или объекты. Например, вместо user_id , user_id , user_is_admin , предпочитают user['name'] , user['id'] , user['is_admin'] , тогда у вас есть только одна переменная ( user ), объявляющая как глобальная, а не третья.