it-swarm.it

Avvertimento rigoroso: solo le variabili devono essere passate per riferimento

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 l'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?

21
silkAdmin

Tale errore si verifica quando una funzione prevede 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 su Passando 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

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

  • render(node_show()) produce un errore irreversibile in PHP 5.0.5, un avviso di 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

52
kiamlaluno