drupal_static () verwendet eine FUNCTION-Variable. Was bedeutet das?

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

Dieses Snippet wird aus common.inc eingefügt. Wir übergeben ein __FUNCTION__an, drupal_static()aber ich weiß nicht, was diese Variable bedeutet. Bedeutet es einen Cache für die äußere Funktion selbst? Wie funktioniert es? Ich sehe keine Daten, die innerhalb der Funktion verarbeitet werden, bevor sie zurückkehren $content_block.

Drupal cai
quelle

Antworten:

34

__FUNCTION__ist eine der sogenannten magischen Konstanten von PHP.

Es wird lediglich eine Zeichenfolge mit dem Namen der Funktion zurückgegeben, in der die Konstante enthalten ist.

Beispielsweise:

function my_strangely_named_function() {
  print __FUNCTION__;
}

Oben wird "my_strangely_named_function" gedruckt.

Drupal verwendet diese Konstante mit ihrem statischen Cache, so dass jeder Cache von einer anderen Funktion identifizierbar ist und als solcher identifizierbar gelöscht werden kann.

So verwenden Sie eine gekürzte Version Ihres Codes:

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

Jede andere Funktion im Drupal-Lebenszyklus kann Folgendes aufrufen:

drupal_static_reset('drupal_set_page_content');

Dadurch wird der Cache für diese bestimmte Funktion geleert, sodass die Daten beim nächsten Aufruf so aufgebaut werden, als wären sie neu.

Dies ist nur die grundlegende Verwendung des statischen Cache-Musters. Weitere Informationen und Beispiele finden Sie auf der Dokumentationsseitedrupal_static() .

Clive
quelle
Vielen Dank für Ihre Antwort, ich verstehe jetzt, was diese FUNKTION bedeutet, aber außerdem, wo diese Variable $ content_block zuerst erstellt wurde, da alles, was ich in diesem Code finden kann, darin besteht, Daten aus dem Cache abzurufen, aber wo ist der Cache, in dem sie erstellt wurde der erste Platz, danke!
Drupal cai
1
Kennen Sie statische Variablen in PHP im Allgemeinen?
Clive
1
Zum ersten Kommentar und zur Ergänzung des zweiten wird der 'Cache' im TRUE-Zweig der ifAnweisung
Jimajamma,
1
Was @Jimajamma gesagt hat, sowie die Tatsache, dass drupal_staticeine Registrierung von Caches für alle Funktionen in dem System, das es verwendet, vorhanden ist.
Clive
1
Dies mag ein Schaufenster meiner PHP-Ignoranz sein, aber - wie auch immer: Warum sagen sie in Entity-Verweisen:, drupal_staticanstatt &drupal_static?
Artur
3

Detaillierte Informationen erhalten Sie unter http://blogs.sourceallies.com/2012/02/static-caching-in-drupal/ . Hier ist ein Zitat davon:

... Caching (jeglicher Art, nicht nur statisches Caching) muss auf verantwortungsvolle Weise erfolgen. Die übereifrige Verwendung des Caching überschwemmt den Speicher, der stark frequentierte Websites zum Absturz bringen kann. Denken Sie auch daran, dass das Caching für große Datenstrukturen verwendet werden sollte, deren Generierung teuer ist. Verwenden Sie Caching nur, wenn Sie sicher sind, dass das, was Sie cachen, erneut benötigt wird (z. B. Menüdaten in Drupal). Es hat keinen Sinn, eine Liste mit Namen, Adressen oder Farben zwischenzuspeichern, wenn diese Liste nie wieder verwendet wird. Das wäre, als würden Sie Ihre alten Autoreifen retten, nachdem Sie neue aufgesetzt haben.

Suresh Kumara
quelle