drupal_static () używa zmiennej FUNCTION, co to znaczy?

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

Ten fragment został wklejony z pliku common.inc. Przechodzimy __FUNCTION__do, drupal_static()ale nie wiem, co oznacza ta zmienna. Czy to oznacza pamięć podręczną dla samej funkcji zewnętrznej? Jak to działa? Nie widzę żadnych danych obsługiwanych wewnątrz funkcji przed jej zwróceniem $content_block.

Drupal Cai
źródło

Odpowiedzi:

34

__FUNCTION__jest jedną z tak zwanych magicznych stałych PHP.

Wszystko, co robi, to zwraca ciąg z nazwą funkcji, w której zawarta jest stała.

Na przykład:

function my_strangely_named_function() {
  print __FUNCTION__;
}

Powyżej wypisze „my_strangely_named_function”.

Drupal używa tej stałej ze swoją statyczną pamięcią podręczną, dzięki czemu każda pamięć podręczna jest identyfikowalna na podstawie dowolnej innej funkcji i jako taka może być identyfikowalnie wyczyszczona.

Aby użyć skróconej wersji kodu:

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

Każda inna funkcja w cyklu życia Drupala może wywoływać:

drupal_static_reset('drupal_set_page_content');

Spowoduje to wyczyszczenie pamięci podręcznej dla tej konkretnej funkcji, dzięki czemu przy następnym wywołaniu dane będą gromadzone jak z nowej.

To tylko podstawowe zastosowanie statycznego wzorca pamięci podręcznej, więcej informacji i przykładów można znaleźć na stronie dokumentacjidrupal_static() .

Clive
źródło
Dziękuję za odpowiedź. Teraz rozumiem, co oznacza ta FUNKCJA, ale co więcej, gdzie najpierw utworzono tę zmienną $ content_block, ponieważ wszystko, co mogę znaleźć w tym kodzie, to pobieranie danych z pamięci podręcznej, ale gdzie jest tworzona pamięć podręczna pierwsze miejsce, dziękuję!
Drupal cai
1
Czy ogólnie znasz zmienne statyczne w PHP?
Clive
1
do pierwszego komentarza i rozszerzenia drugiego „pamięć podręczna” jest tworzona w PRAWDZIWEJ gałęzi ifinstrukcji
Jimajamma,
1
To, co powiedział @Jimajamma, plus fakt, że drupal_staticutrzymuje rejestr pamięci podręcznych dla wszystkich funkcji w systemie, który go używa.
Clive
1
Może to być przejaw mojej ignorancji w PHP, ale - w każdym razie: dlaczego mówią w odniesieniu do bytu: drupal_staticzamiast &drupal_static?
Artur
3

Szczegółowe informacje znajdziesz na stronie http://blogs.sourceallies.com/2012/02/static-caching-in-drupal/ . Oto cytat z tego:

... buforowanie (dowolnego rodzaju, nie tylko buforowanie statyczne) powinno odbywać się w odpowiedzialny sposób. Nadmierne użycie pamięci podręcznej powoduje zalanie pamięci, która może spowodować awarię witryn o dużym ruchu. Pamiętaj również, że buforowanie powinno być stosowane w przypadku dużych struktur danych, których generowanie jest kosztowne. Na koniec używaj buforowania tylko wtedy, gdy masz pewność, że pamięć podręczna będzie ponownie potrzebna (np. Dane menu w Drupal). Nie ma sensu buforowanie listy nazwisk, adresów lub kolorów, jeśli ta lista nigdy nie będzie ponownie używana. To byłoby jak oszczędzanie starych opon samochodowych po założeniu nowych.

Suresh Kumara
źródło