Advertencia estricta: solo las variables deben pasarse por referencia

21

Obtuve el siguiente error:

Advertencia estricta: solo las variables deben pasarse por referencia en include () (línea 18 de /home/sites/dev/theparce/sites/all/themes/parce/block--block--3.tpl.php).

Este es el código de bloqueo que está causando ese error.

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 qué recibo ese error, incluso si todo se imprime como se esperaba?

sedaadmin
fuente

Respuestas:

52

Ese error ocurre cuando una función espera una referencia como parámetro, pero no obtiene una referencia.

En su caso, render()se define como render(&$element), pero node_show()se define como node_show($node, $message = FALSE), no &node_show($node, $message = FALSE).
Lo mismo sería cierto para drupal_render(), ya que la función se define como drupal_render(&$elements).

Como se explica en Pasando por referencia , cuando una función requiere un parámetro de referencia, puede pasar a la función:

  • Variables (por ejemplo, una variable temporal que contiene el resultado de una función que no devuelve una referencia)

  • Referencias devueltas de funciones

Usando otras expresiones, el resultado es indefinido y depende de la versión de PHP.

  • render(node_show()) produce un error fatal en PHP 5.0.5, un aviso de estándares estrictos en PHP 5.1.1 y un aviso en PHP 7.0.0

  • render(5) produce un error fatal

  • render(new DateTime()) produce un aviso en PHP 7.0.7

kiamlaluno
fuente