[Решен] Глобальная переменная

Чт, 20/04/2017 - 19:04

Всем привет!
Ребят, подскажите пожалуйста, как сделать такие же удобные глобальные переменные в модуле, как глобалы в Друпале 7(типа $user и т.д.).
По началу я подумал, что это ограничивается только спецификацией языка php. Я в файле mymodule.install в хуке mymodule_install() объявил глобальную переменную и задал ей значение:
global $my_variable;
$my_variable = 'abc';
Затем в файле mymodule.module в хуке mymodule_menu() я написал, чтобы это выводилась это переменная на странице моего модуля.
Но она оказывается пустой, когда пишешь так: global $drupal_entity_key_uniclust; и затем выводишь, или без этого php вообще не видит сию переменную!
В общем, как сотворить такие глобалы, как даёт нам Друпал?

0 Спасибо

Лучший ответ

Аватар пользователя bsyomov
4 дня 8 часов назад bsyomov #

Глобальная переменная, вообще говоря, это не что-то постоянное. Её глобальность это только о области видимости в рамках одного процесса.

Ваш hook_install и hook_menu вызываются в разное время, в разных процессах. Естественно никто за вас не будет хранить значение каких-либо переменных.

Вам надо использовать, например variable_set() и variable_get(), как правильно заметил fairrandir.
Или каким-то другим образом сохранять где-то значение переменной.

Ну и глобальные переменные в вашем кейсе вообще не нужны. Кстати, без крайней необходимости глобальные переменные, не надо использовать в принципе - это часто ведёт к проблемам безопасности, например.

3 Спасибо

Комментарии

Аватар пользователя fairrandir
5 дней 15 часов назад fairrandir #

Не балуйтесь с глобальными переменными, особенно, если не знаете как с ними работать. И вам скорее нужны функции variable_set() и variable_get()

0 Спасибо
Аватар пользователя xakd
5 дней 5 часов назад xakd #

Читаем, ищём, Друпал тут побоку http://www.php.su/learnphp/vars/?glvars
Объявлять в фукнкциях надо так
<?php  $GLOBALS['user'] = $original_user?>

0 Спасибо
Аватар пользователя gun_dose
4 дня 18 часов назад gun_dose #

Друпал тут не по боку, т.к с большой долей вероятности глобальная переменная, объявленная в инсталл-файле не будет доступна в модуле по одной простой причине. Озвучивать причину пока не буду, но дам подсказку, что она на стыке архитектуры друпала и здравого смысла.

0 Спасибо
Аватар пользователя xakd
4 дня 3 часа назад xakd #

Я просто не читал полностью, увидел, что глобалка неверно объявлена - и написал. А так как описано конечно работать не будет - install запускается лишь раз

0 Спасибо
Аватар пользователя bsyomov
4 дня 8 часов назад bsyomov #

Глобальная переменная, вообще говоря, это не что-то постоянное. Её глобальность это только о области видимости в рамках одного процесса.

Ваш hook_install и hook_menu вызываются в разное время, в разных процессах. Естественно никто за вас не будет хранить значение каких-либо переменных.

Вам надо использовать, например variable_set() и variable_get(), как правильно заметил fairrandir.
Или каким-то другим образом сохранять где-то значение переменной.

Ну и глобальные переменные в вашем кейсе вообще не нужны. Кстати, без крайней необходимости глобальные переменные, не надо использовать в принципе - это часто ведёт к проблемам безопасности, например.

3 Спасибо