drupal_static () sử dụng biến FUNCTION, có nghĩa là gì?


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

Đoạn mã này được dán từ common.inc. Chúng tôi vượt qua trong một __FUNCTION__đến drupal_static()nhưng tôi không biết điều này những gì biến phương tiện. Liệu nó có nghĩa là một bộ đệm cho chính chức năng bên ngoài? Làm thế nào nó hoạt động? Tôi không thấy bất kỳ dữ liệu nào được xử lý bên trong hàm trước khi nó trả về $content_block.

Câu trả lời:


34

__FUNCTION__là một trong những cái gọi là Hằng số ma thuật của PHP.

Tất cả những gì nó làm là trả về một chuỗi với tên của hàm mà hằng số được chứa trong đó.

Ví dụ:

function my_strangely_named_function() {
  print __FUNCTION__;
}

Ở trên sẽ in 'my_strangely_named_function'.

Drupal sử dụng hằng số này với bộ đệm tĩnh để mỗi bộ đệm có thể được nhận dạng từ bất kỳ chức năng nào khác và do đó có thể được xóa một cách rõ ràng.

Để sử dụng phiên bản rút gọn của mã của bạn:

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

Bất kỳ chức năng nào khác trong vòng đời Drupal đều có thể gọi:

drupal_static_reset('drupal_set_page_content');

Và điều đó sẽ xóa bộ đệm cho chức năng cụ thể đó, để lần sau nó được gọi là dữ liệu được xây dựng như thể từ mới.

Đó chỉ là cách sử dụng cơ bản của mẫu bộ đệm tĩnh, bạn có thể tìm thêm thông tin và ví dụ trên trang tài liệudrupal_static() .


Cảm ơn câu trả lời của bạn, bây giờ tôi đã hiểu FUNCTION này có nghĩa là gì, nhưng hơn nữa, biến $ content_block này được tạo lần đầu tiên ở đâu, vì tất cả những gì tôi có thể tìm thấy trong mã này là nó lấy dữ liệu từ bộ đệm, nhưng bộ đệm được tạo ở đâu nơi đầu tiên, cảm ơn bạn!
Drupal cai

1
Bạn có quen thuộc với các biến tĩnh trong PHP nói chung không?
Clive

1
đến bình luận đầu tiên và tăng thêm bình luận thứ hai, 'bộ đệm' được tạo trong nhánh TRUE của ifcâu lệnh
Jimajamma

1
Những gì @Jimajamma nói, cộng với thực tế là drupal_staticgiữ một sổ đăng ký bộ nhớ cache cho tất cả các chức năng trong hệ thống sử dụng nó.
Clive

1
Đây có thể là một ví dụ về sự thiếu hiểu biết về PHP của tôi, nhưng - dù sao đi nữa: tại sao họ lại nói theo thực thể:, drupal_staticchứ không phải là &drupal_static?
Artur

3

Trong thông tin chuyên sâu, bạn sẽ nhận được tại http://bloss.sourceallies.com/2012/02/static-caching-in-drupal/ . Đây là một trích dẫn từ nó:

... bộ nhớ đệm (dưới bất kỳ hình thức nào, không chỉ bộ nhớ đệm tĩnh) sẽ được thực hiện một cách có trách nhiệm. Việc sử dụng quá mức bộ nhớ đệm bộ nhớ đệm có thể làm sập các trang web lưu lượng truy cập cao. Cũng cần nhớ rằng bộ nhớ đệm nên được sử dụng cho các cấu trúc dữ liệu lớn tốn kém để tạo. Cuối cùng, chỉ sử dụng bộ đệm ẩn nếu bạn biết chắc chắn rằng những gì bạn sẽ lưu lại bộ đệm (ví dụ: dữ liệu menu trong Drupal). Không có điểm lưu trữ danh sách tên hoặc địa chỉ hoặc màu sắc nếu danh sách đó sẽ không bao giờ được sử dụng lại. Điều đó sẽ giống như tiết kiệm lốp xe cũ của bạn sau khi bạn đặt cái mới vào.

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.