Ostre ostrzeżenie: tylko zmienne powinny być przekazywane przez odniesienie

21

Otrzymuję następujący błąd:

Ostre ostrzeżenie: Tylko zmienne powinny być przekazywane przez referencję w include () (wiersz 18 /home/sites/dev/theparce/sites/all/themes/parce/block--block--3.tpl.php).

To jest kod blokowy, który powoduje ten błąd.

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

}
else {
  print drupal_render($user_gallery_new);
}

Dlaczego dostaję ten błąd, nawet jeśli wydrukowałem wszystko zgodnie z oczekiwaniami?

silkAdmin
źródło

Odpowiedzi:

52

Ten błąd występuje, gdy funkcja oczekuje referencji jako parametru, ale nie otrzymuje referencji.

W twoim przypadku render()jest zdefiniowany jako render(&$element), ale node_show()jest zdefiniowany jako node_show($node, $message = FALSE), nie &node_show($node, $message = FALSE).
To samo dotyczyłoby drupal_render(), ponieważ funkcja jest zdefiniowana jako drupal_render(&$elements).

Jak wyjaśniono w punkcie Przekazywanie przez odniesienie , gdy funkcja wymaga parametru odniesienia, możesz przejść do funkcji:

  • Zmienne (na przykład zmienna tymczasowa zawierająca wynik funkcji, która nie zwraca odwołania)

  • Referencje zwrócone z funkcji

Używając innych wyrażeń, wynik jest niezdefiniowany i zależy od wersji PHP.

  • render(node_show()) powoduje błąd krytyczny w PHP 5.0.5, zawiadomienie o ścisłych standardach w PHP 5.1.1 i zawiadomienie w PHP 7.0.0

  • render(5) powoduje błąd krytyczny

  • render(new DateTime()) tworzy powiadomienie w PHP 7.0.7

kiamlaluno
źródło