web-dev-qa-db-fra.com

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

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. On passe 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 qu'elle ne retourne $content_block.

21
Drupal cai

__FUNCTION__ Est l'un des soi-disant Magic Constants 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 venaient de 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 pour drupal_static() elle-même.

35
Clive

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, n'utilisez la mise en cache que 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.

3
Suresh Kumara