严格警告:只能通过引用传递变量


21

我收到以下错误:

严格警告:只能在include()(/ home / sites / dev / theparce / sites / all / themes / parce / block--block--3.tpl.php)的第18行中通过引用传递变量。

这是导致该错误的阻止代码。

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

}
else {
  print drupal_render($user_gallery_new);
}

即使我按预期方式打印了所有内容,为什么也会出现该错误?

Answers:


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中产生一个通知

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.