drupal_static () usa una variabile FUNCTION, cosa significa?


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

Questo frammento è incollato da common.inc. Passiamo a __FUNCTION__a drupal_static()ma non so cosa significhi questa variabile. Significa una cache per la funzione esterna stessa? Come funziona? Non vedo alcun dato gestito all'interno della funzione prima che ritorni $content_block.

Risposte:


34

__FUNCTION__è una delle cosiddette costanti magiche di PHP.

Tutto ciò che fa è restituire una stringa con il nome della funzione in cui è contenuta la costante.

Per esempio:

function my_strangely_named_function() {
  print __FUNCTION__;
}

Quanto sopra verrà stampato "my_strangely_named_function".

Drupal usa questa costante con la sua cache statica in modo che ogni cache sia identificabile da qualsiasi altra funzione e come tale può essere cancellata in modo identificabile.

Per utilizzare una versione ridotta del codice:

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

Qualsiasi altra funzione nel ciclo di vita di Drupal può chiamare:

drupal_static_reset('drupal_set_page_content');

E questo cancellerà la cache per quella specifica funzione, in modo che la prossima volta che viene chiamato i dati vengono creati come se fossero nuovi.

Questo è solo l'uso di base del modello di cache statica, puoi trovare ulteriori informazioni ed esempi sulla paginadrupal_static() della documentazione per se stesso.


Grazie per la tua risposta, ora capisco cosa significa questa FUNZIONE, ma ancora di più, dove viene creata questa variabile $ content_block, poiché tutto ciò che posso trovare in questo codice è che recupera i dati dalla cache, ma dove si trova la cache in il primo posto, grazie!
Drupal cai,

1
Conoscete le variabili statiche in PHP in generale?
Clive

1
per il primo commento, e aumentando il secondo, il 'cache' è stato creato nel ramo TRUE della ifdichiarazione
Jimajamma

1
Cosa ha detto @Jimajamma, oltre al fatto che drupal_statictiene in mano un registro di cache per tutte le funzioni del sistema che lo utilizzano.
Clive

1
Questa potrebbe essere una vetrina della mia ignoranza di PHP, ma - comunque: perché dicono in entityreference:, drupal_staticpiuttosto che &drupal_static?
Artur,

3

Informazioni dettagliate sono disponibili all'indirizzo http://blogs.sourceallies.com/2012/02/static-caching-in-drupal/ . Ecco una citazione da esso:

... la memorizzazione nella cache (di qualsiasi tipo, non solo la memorizzazione nella cache statica) deve essere eseguita in modo responsabile. L'uso troppo zelante della cache inonda la memoria che può causare l'arresto anomalo dei siti Web ad alto traffico. Ricordare inoltre che la memorizzazione nella cache deve essere utilizzata per strutture di dati di grandi dimensioni che sono costose da generare. Infine, utilizza la memorizzazione nella cache solo se sai con certezza che ciò di cui avrai bisogno nella cache sarà necessario (ad esempio, i dati di menu in Drupal). Non ha senso memorizzare nella cache un elenco di nomi o indirizzi o colori se tale elenco non verrà mai più utilizzato. Sarebbe come salvare le vecchie gomme dell'auto dopo averle montate di nuove.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.