drupal_static () ใช้ตัวแปร FUNCTION มันหมายความว่าอะไร?


21
function drupal_set_page_content($content = NULL) {
     $content_block = &drupal_static(__FUNCTION__, NULL);
     $main_content_display = &drupal_static('system_main_content_added', FALSE);

 if (!empty($content)) {
   $content_block = (is_array($content) ? $content : array('main' => array('#markup' => $content)));
 }
 else {
   $main_content_display = TRUE;
   return $content_block;
  }
}

ตัวอย่างนี้วางจาก common.inc เราส่งผ่าน__FUNCTION__ไปยัง drupal_static()แต่ฉันไม่ทราบว่าตัวแปรนี้หมายถึงอะไร มันหมายถึงแคชสำหรับฟังก์ชั่นด้านนอกหรือไม่? มันทำงานยังไง? ฉันไม่เห็นข้อมูลใด ๆ $content_blockที่จัดการภายในฟังก์ชันก่อนที่จะส่งกลับ

คำตอบ:


34

__FUNCTION__เป็นหนึ่งในสิ่งที่เรียกว่าMagic Constantsของ PHP

สิ่งที่มันทำคือส่งคืนสตริงที่มีชื่อของฟังก์ชันที่มีค่าคงที่

ตัวอย่างเช่น:

function my_strangely_named_function() {
  print __FUNCTION__;
}

ด้านบนจะพิมพ์ 'my_strangely_named_function'

Drupal ใช้ค่าคงนี้กับแคชแบบสแตติกเพื่อให้แต่ละแคชสามารถระบุได้จากฟังก์ชั่นอื่น ๆ และสามารถล้างค่าได้เช่นกัน

วิธีใช้รหัสย่อของคุณ:

function drupal_set_page_content($content = NULL) {
  $content_block = &drupal_static(__FUNCTION__, NULL);
}

ฟังก์ชั่นอื่น ๆ ในวงจรชีวิตของ Drupal สามารถเรียก:

drupal_static_reset('drupal_set_page_content');

และนั่นจะล้างแคชสำหรับฟังก์ชั่นเฉพาะนั้นในครั้งถัดไปที่มันถูกเรียกว่าข้อมูลจะถูกสร้างขึ้นเหมือนใหม่

นั่นเป็นเพียงการใช้งานพื้นฐานของรูปแบบแคชแบบสแตติกคุณสามารถค้นหาข้อมูลเพิ่มเติมและตัวอย่างในหน้าเอกสารประกอบสำหรับdrupal_static()ตัวเอง


ขอบคุณสำหรับคำตอบของคุณตอนนี้ฉันเข้าใจว่าฟังก์ชัน FUNCTION นี้หมายความว่าอย่างไร แต่ยิ่งไปกว่านั้นตัวแปร $ content_block นี้ถูกสร้างขึ้นครั้งแรกเพราะฉันสามารถหาได้ในรหัสนี้ว่ามันดึงข้อมูลจากแคช แต่แคชอยู่ที่ไหน ที่แรกขอขอบคุณ!
Drupal cai

1
คุณคุ้นเคยกับตัวแปรแบบคงที่ใน PHP โดยทั่วไปหรือไม่?
Clive

1
เพื่อแสดงความคิดเห็นแรกและเพิ่มที่สอง 'แคช' ถูกสร้างขึ้นในสาขา TRUE ของifคำสั่ง
Jimajamma

1
สิ่งที่ @Jimajamma พูดพร้อมกับความจริงที่drupal_staticเก็บรีจิสทรีของแคชสำหรับฟังก์ชั่นทั้งหมดในระบบที่ใช้งาน
Clive

1
นี้อาจจะมีการแสดงของความไม่รู้ PHP ของฉัน แต่ - อยู่ดี: ทำไมพวกเขาพูดใน entityreference: drupal_staticมากกว่า&drupal_static?
Artur

3

ข้อมูลเชิงลึกคุณจะได้รับที่http://blogs.sourceallies.com/2012/02/static-caching-in-drupal/ นี่คือคำพูดจากมัน:

... การแคช (ทุกชนิดไม่ใช่แค่การแคชแบบคงที่) จะต้องกระทำในลักษณะที่รับผิดชอบ การใช้หน่วยความจำแคชมากเกินไปซึ่งอาจทำให้เว็บไซต์ที่มีปริมาณการใช้งานสูง โปรดจำไว้ว่าควรใช้แคชสำหรับโครงสร้างข้อมูลขนาดใหญ่ที่มีราคาแพงในการสร้าง สุดท้ายใช้แคชเฉพาะเมื่อคุณรู้ว่าสิ่งที่แคชคุณจะต้องอีกครั้ง (เช่นข้อมูลเมนูใน Drupal) ไม่มีจุดแคชรายการชื่อหรือที่อยู่หรือสีถ้ารายการนั้นจะไม่ถูกใช้อีก นั่นจะเหมือนกับการช่วยประหยัดยางรถยนต์เก่าของคุณหลังจากที่คุณใส่ยางใหม่

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