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?

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.