Avertissement strict: seules les variables doivent être transmises par référence

21

J'obtiens l'erreur suivante:

Avertissement strict: seules les variables doivent être transmises par référence dans include () (ligne 18 de /home/sites/dev/theparce/sites/all/themes/parce/block--block--3.tpl.php).

C'est le code de bloc qui cause cette erreur.

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

}
else {
  print drupal_render($user_gallery_new);
}

Pourquoi est-ce que j'obtiens cette erreur, même si tout est imprimé comme prévu?

soieAdmin
la source

Réponses:

52

Cette erreur se produit lorsqu'une fonction attend une référence en tant que paramètre, mais qu'elle n'obtient pas de référence.

Dans votre cas, render()est défini comme render(&$element), mais node_show()est défini comme node_show($node, $message = FALSE)non &node_show($node, $message = FALSE).
La même chose serait vraie pour drupal_render(), puisque la fonction est définie comme drupal_render(&$elements).

Comme expliqué dans Passing by Reference , lorsqu'une fonction nécessite un paramètre de référence, vous pouvez passer à la fonction:

  • Variables (par exemple, une variable temporaire contenant le résultat d'une fonction qui ne renvoie pas de référence)

  • Références renvoyées par les fonctions

En utilisant d'autres expressions, le résultat n'est pas défini et cela dépend de la version PHP.

  • render(node_show()) produit une erreur fatale en PHP 5.0.5, un avis de normes strictes en PHP 5.1.1 et un avis en PHP 7.0.0

  • render(5) produit une erreur fatale

  • render(new DateTime()) produit un avis en PHP 7.0.7

kiamlaluno
la source