Aviso estrito: Somente variáveis ​​devem ser passadas por referência

21

Estou tendo o erro a seguir:

Aviso estrito: Somente variáveis ​​devem ser passadas por referência em include () (linha 18 de /home/sites/dev/theparce/sites/all/themes/parce/block--block--3.tpl.php).

Este é o código de bloco que está causando esse erro.

if ($user_gallery) {
  print render(node_show($user_gallery));  // Line 18
  print drupal_render ($user_gallery_edit);

}
else {
  print drupal_render($user_gallery_new);
}

Por que recebo esse erro, mesmo que eu seja impresso como esperado?

silkAdmin
fonte

Respostas:

52

Esse erro ocorre quando uma função espera uma referência como parâmetro, mas não está obtendo uma referência.

No seu caso, render()é definido como render(&$element), mas node_show()é definido como node_show($node, $message = FALSE), não &node_show($node, $message = FALSE).
O mesmo seria verdadeiro para drupal_render(), uma vez que a função é definida como drupal_render(&$elements).

Conforme explicado em Passagem por referência , quando uma função requer um parâmetro de referência, você pode passar para a função:

  • Variáveis ​​(por exemplo, uma variável temporária que contém o resultado de uma função que não está retornando uma referência)

  • Referências retornadas de funções

Usando outras expressões, o resultado é indefinido e depende da versão do PHP.

  • render(node_show()) produz um erro fatal no PHP 5.0.5, um aviso de padrões rigorosos no PHP 5.1.1 e um aviso no PHP 7.0.0

  • render(5) produz um erro fatal

  • render(new DateTime()) produz um aviso no PHP 7.0.7

kiamlaluno
fonte