web-dev-qa-db-fra.com

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

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?

21
silkAdmin

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), pas &node_show($node, $message = FALSE).
La même chose serait vraie pour drupal_render() , car la fonction est définie comme drupal_render(&$elements).

Comme expliqué sur 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 dépend de la version PHP.

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

  • render(5) produit une erreur fatale

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

52
kiamlaluno