Суворе попередження: тільки змінні повинні передаватися за посиланням


21

Я отримую таку помилку:

Суворе попередження: Тільки змінні повинні бути передані за посиланням у include () (рядок 18 /home/sites/dev/theparce/sites/all/themes/parce/block--block--3.tpl.php).

Це код блоку, який викликає цю помилку.

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

}
else {
  print drupal_render($user_gallery_new);
}

Чому я отримую цю помилку, навіть якщо я друкую все так, як очікувалося?

Відповіді:


52

Ця помилка трапляється, коли функція очікує посилання як параметр, але вона не отримує посилання.

У вашому випадку render()визначається як render(&$element), але node_show()визначається як node_show($node, $message = FALSE), не &node_show($node, $message = FALSE).
Те саме було б справедливо і для drupal_render(), оскільки функція визначена як drupal_render(&$elements).

Як пояснено у програмі Passing by Reference , коли для функції потрібен еталонний параметр, ви можете перейти до функції:

  • Змінні (наприклад, тимчасова змінна, що містить результат функції, яка не повертає посилання)

  • Посилання, повернені з функцій

Використовуючи інші вирази, результат не визначений, і це залежить від версії PHP.

  • render(node_show()) створює фатальну помилку в PHP 5.0.5, суворе повідомлення про стандарт у PHP 5.1.1 та повідомлення в PHP 7.0.0

  • render(5) створює фатальну помилку

  • render(new DateTime()) видає повідомлення в PHP 7.0.7

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.