2012-03-16 2 views
3

Поблагодарили бы, если кто-нибудь может сообщить мне, как мы можем установить переменную global $user, так что нам не нужно повторно декларировать ее в каждой функции, чтобы получить доступ к ее содержимому. Как мы можем объявить его так, чтобы все функции в модуле могли его использовать?

ответ

4

Тип глобального вы ищете (доступны всегда, в каждом scope) в PHP называется superglobal. Вы не можете объявлять новые суперглобалы, но вы можете получить доступ ко всем глобальным группам напрямую, потому что они являются частью суперглобального $GLOBAL. Другими словами, вы можете использовать $GLOBALS['user'] для прямого доступа к $ user global.

См. Также create superglobal variables in php? для получения дополнительной информации и альтернативных методов.

+0

+1 забыл о '$ GLOBALS' :) – Clive

+0

Большое спасибо. Итак, теперь я могу просто делать $ GLOBALS ['user'] -> uid каждый раз, когда мне нужно получить идентификатор пользователя текущего пользователя. –

3

Вы не можете ... вот как работают глобальные переменные в PHP. Если вы хотите импортировать глобальную переменную в свою локальную функцию, вам нужно использовать ключевое слово global, ее нет. Это «особенность» языка PHP, это не имеет никакого отношения к Drupal.

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

function get_current_user() { 
    global $user; 
    return $user; 
} 

И называть это так:

$user = &get_current_user(); 
1

В вашей функции, если вы хотите использовать переменную $ user, вам просто нужно использовать/создавать экземпляр «global» до $ user it. Чтобы вы могли получить доступ ко всем данным для этого текущего пользователя веб-сайта.

Например

function myGenericFunc(){ 
     global $user; 
     $user_id = $user->uid; 
    } 

Заметим, что вы не можете переопределить его.

Надеюсь, это поможет.