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

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);
}

Почему я получаю эту ошибку, даже если все напечатано, как ожидалось?

silkAdmin
источник

Ответы:

52

Эта ошибка возникает, когда функция ожидает ссылку в качестве параметра, но не получает ссылку.

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

Как объяснено в разделе « Передача по ссылке» , когда функции требуется параметр ссылки, вы можете перейти к функции:

  • Переменные (например, временная переменная, содержащая результат функции, которая не возвращает ссылку)

  • Ссылки, возвращаемые из функций

Используя другие выражения, результат не определен, и это зависит от версии 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

киамалуно
источник