drupal_static () utilise une variable FUNCTION, qu'est-ce que cela signifie?

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

Cet extrait est collé à partir de common.inc. Nous passons un __FUNCTION__à drupal_static()mais je ne sais pas ce que signifie cette variable. Cela signifie-t-il un cache pour la fonction externe elle-même? Comment ça marche? Je ne vois aucune donnée gérée dans la fonction avant son retour $content_block.

Drupal cai
la source

Réponses:

34

__FUNCTION__est l'une des soi-disant constantes magiques de PHP.

Il ne fait que renvoyer une chaîne avec le nom de la fonction dans laquelle la constante est contenue.

Par exemple:

function my_strangely_named_function() {
  print __FUNCTION__;
}

Ce qui précède imprimera 'my_strangely_named_function'.

Drupal utilise cette constante avec son cache statique afin que chaque cache soit identifiable à partir de toute autre fonction, et en tant que tel puisse être effacé de manière identifiable.

Pour utiliser une version abrégée de votre code:

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

Toute autre fonction du cycle de vie Drupal peut appeler:

drupal_static_reset('drupal_set_page_content');

Et cela effacera le cache pour cette fonction spécifique, de sorte que la prochaine fois qu'elle sera appelée, les données seront créées comme si elles étaient nouvelles.

C'est juste l'utilisation de base du modèle de cache statique, vous pouvez trouver plus d'informations et d'exemples sur la page de documentation pourdrupal_static() lui-même.

Clive
la source
Merci pour votre réponse, je comprends maintenant ce que signifie cette FONCTION, mais plus encore, où est cette variable $ content_block créée en premier, car tout ce que je peux trouver dans ce code est qu'il récupère les données du cache, mais où est le cache créé dans la première place, merci!
Drupal cai
1
Connaissez-vous les variables statiques en PHP en général?
Clive
1
au premier commentaire, et en augmentant le second, le «cache» est créé dans la branche TRUE de la ifdéclaration
Jimajamma
1
Ce que @Jimajamma a dit, plus le fait qu'il drupal_statictient un registre de caches pour toutes les fonctions du système qui l'utilisent.
Clive
1
Cela pourrait être une vitrine de mon ignorance PHP, mais - de toute façon: pourquoi disent-ils dans entityreference:, drupal_staticplutôt que &drupal_static?
Artur
3

Vous trouverez des informations détaillées sur http://blogs.sourceallies.com/2012/02/static-caching-in-drupal/ . En voici une citation:

... la mise en cache (quelle qu'elle soit, pas seulement la mise en cache statique) doit être effectuée de manière responsable. L'utilisation trop zélée de la mise en cache inonde la mémoire, ce qui peut bloquer les sites Web à fort trafic. N'oubliez pas également que la mise en cache doit être utilisée pour les grandes structures de données dont la génération est coûteuse. Enfin, utilisez la mise en cache uniquement si vous savez avec certitude que ce que vous mettez en cache sera à nouveau nécessaire (par exemple, les données de menu dans Drupal). Il est inutile de mettre en cache une liste de noms ou d'adresses ou de couleurs si cette liste ne sera plus jamais utilisée. Ce serait comme économiser vos vieux pneus de voiture après en avoir mis de nouveaux.

Suresh Kumara
la source