Avvertimento rigoroso: solo le variabili devono essere passate per riferimento


21

Ottengo il seguente errore:

Avvertimento rigoroso: solo le variabili devono essere passate per riferimento in include () (riga 18 di /home/sites/dev/theparce/sites/all/themes/parce/block--block--3.tpl.php).

Questo è il codice di blocco che causa quell'errore.

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

}
else {
  print drupal_render($user_gallery_new);
}

Perché visualizzo quell'errore, anche se tutto viene stampato come previsto?

Risposte:


52

Tale errore si verifica quando una funzione si aspetta un riferimento come parametro, ma non sta ottenendo un riferimento.

Nel tuo caso, render()è definito come render(&$element), ma node_show()è definito come node_show($node, $message = FALSE), non &node_show($node, $message = FALSE).
Lo stesso vale per drupal_render(), poiché la funzione è definita come drupal_render(&$elements).

Come spiegato in Passaggio per riferimento , quando una funzione richiede un parametro di riferimento, è possibile passare alla funzione:

  • Variabili (ad esempio, una variabile temporanea contenente il risultato di una funzione che non restituisce un riferimento)

  • Riferimenti restituiti da funzioni

Utilizzando altre espressioni, il risultato non è definito e dipende dalla versione di PHP.

  • render(node_show()) produce un errore irreversibile in PHP 5.0.5, un avviso standard rigoroso in PHP 5.1.1 e un avviso in PHP 7.0.0

  • render(5) produce un errore fatale

  • render(new DateTime()) produce un avviso in PHP 7.0.7

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.