Cảnh báo nghiêm ngặt: Chỉ các biến nên được chuyển qua tham chiếu


21

Tôi nhận được lỗi sau đây:

Cảnh báo nghiêm ngặt: Chỉ nên chuyển các biến bằng tham chiếu trong tệp bao gồm () (dòng 18 của /home/sites/dev/theparce/sites/all/theme/parce/block--block--3.tpl.php).

Đây là mã khối gây ra lỗi đó.

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

}
else {
  print drupal_render($user_gallery_new);
}

Tại sao tôi nhận được lỗi đó, ngay cả khi tôi nhận được tất cả được in như mong đợi?

Câu trả lời:


52

Lỗi đó xảy ra khi một hàm đang mong đợi một tham chiếu là tham số, nhưng nó không nhận được tham chiếu.

Trong trường hợp của bạn, render()được định nghĩa là render(&$element), nhưng node_show()được định nghĩa là node_show($node, $message = FALSE), không &node_show($node, $message = FALSE).
Điều này cũng đúng với drupal_render()vì hàm được định nghĩa là drupal_render(&$elements).

Như đã giải thích về Passing by Reference , khi một hàm yêu cầu tham số tham chiếu, bạn có thể chuyển đến hàm:

  • Các biến (ví dụ: một biến tạm thời chứa kết quả của hàm không trả về tham chiếu)

  • Tài liệu tham khảo được trả về từ các chức năng

Sử dụng các biểu thức khác, kết quả không xác định và nó phụ thuộc vào phiên bản PHP.

  • render(node_show()) tạo ra lỗi nghiêm trọng trong PHP 5.0.5, thông báo tiêu chuẩn nghiêm ngặt trong PHP 5.1.1 và thông báo trong PHP 7.0.0

  • render(5) tạo ra một lỗi nghiêm trọng

  • render(new DateTime()) tạo một thông báo trong PHP 7.0.7

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.