Peringatan ketat: Hanya variabel yang harus dilewatkan dengan referensi

21

Saya mendapatkan kesalahan berikut:

Peringatan ketat: Hanya variabel yang harus dilewati oleh referensi dalam include () (baris 18 dari /home/sites/dev/theparce/sites/all/themes/parce/block--block--3.tpl.php).

Ini adalah kode blok yang menyebabkan kesalahan itu.

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

}
else {
  print drupal_render($user_gallery_new);
}

Mengapa saya mendapatkan kesalahan itu, bahkan jika saya mencetak semuanya seperti yang diharapkan?

sutra sutera
sumber

Jawaban:

52

Kesalahan itu terjadi ketika suatu fungsi mengharapkan referensi sebagai parameter, tetapi itu tidak mendapatkan referensi.

Dalam kasus Anda, render()didefinisikan sebagai render(&$element), tetapi node_show()didefinisikan sebagai node_show($node, $message = FALSE), bukan &node_show($node, $message = FALSE).
Hal yang sama berlaku untuk drupal_render(), karena fungsi didefinisikan sebagai drupal_render(&$elements).

Seperti yang dijelaskan pada Passing by Reference , ketika suatu fungsi membutuhkan parameter referensi, Anda dapat beralih ke fungsi tersebut:

  • Variabel (misalnya, variabel sementara yang berisi hasil fungsi yang tidak mengembalikan referensi)

  • Referensi dikembalikan dari fungsi

Menggunakan ekspresi lain, hasilnya tidak terdefinisi, dan itu tergantung dari versi PHP.

  • render(node_show()) menghasilkan kesalahan fatal dalam PHP 5.0.5, pemberitahuan standar ketat di PHP 5.1.1, dan pemberitahuan di PHP 7.0.0

  • render(5) menghasilkan kesalahan fatal

  • render(new DateTime()) menghasilkan pemberitahuan di PHP 7.0.7

kiamlaluno
sumber