A função que você poderia usar é user_uid_optional_load () ; sem argumentos, ele retorna o objeto de usuário para o usuário conectado no momento. Ele ainda usa o global $user
e carrega o objeto completo do banco de dados, incluindo os campos associados aos usuários, mas evita que seu código altere acidentalmente o conteúdo da variável global $user
, pois não é referenciado no seu código.
function user_uid_optional_load($uid = NULL) {
if (!isset($uid)) {
$uid = $GLOBALS['user']->uid;
}
return user_load($uid);
}
Se você não precisar do objeto completo, poderá usar o código já relatado nas outras respostas. Se quiser ter certeza de que não altera o objeto global, você pode copiar a variável global em uma variável local, como no snippet a seguir.
$account = $GLOBALS['user'];
// Use $account.
No Drupal 8, você simplesmente usa o método estático \Drupal::currentUser()
para obter o equivalente ao Drupal 7 $GLOBALS['user']
e \Drupal\user\Entity\User::load(\Drupal::currentUser()->id())
obter um objeto totalmente carregado com todos os seus campos de API de campo. Não há mais o risco de substituir uma variável global com todas as consequências.
No caso de você precisar trocar o usuário atual com, por exemplo, o usuário anônimo, o código usado no Drupal 8 é o seguinte.
$accountSwitcher = Drupal::service('account_switcher');
$accountSwitcher->switchTo(new Drupal\Core\Session\AnonymousUserSession());
// Your code here.
// Eventually, restore the user account.
$accountSwitcher->switchBack();