คำเตือนที่เข้มงวด: เฉพาะตัวแปรที่ควรผ่านการอ้างอิง


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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.