web-dev-qa-db-ja.com

drupal_static()はFUNCTION変数を使用していますが、どういう意味ですか?

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

このスニペットはcommon.incから貼り付けられています。 ___FUNCTION___を drupal_static() に渡しますが、この変数の意味がわかりません。それは外部関数自体のキャッシュを意味しますか?それはどのように機能しますか?関数が_$content_block_を返す前に、関数内で処理されるデータはありません。

21
Drupal cai

___FUNCTION___は、PHPのいわゆる マジック定数 の1つです。

定数が含まれている関数の名前を文字列で返すだけです。

例えば:

_function my_strangely_named_function() {
  print __FUNCTION__;
}
_

上記は 'my_strangely_named_function'を出力します。

Drupalはこの定数を静的キャッシュと共に使用するため、各キャッシュは他の関数から識別可能であり、そのため、識別可能にクリアできます。

コードの要約版を使用するには:

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

Drupalライフサイクルの他の関数は、以下を呼び出すことができます。

_drupal_static_reset('drupal_set_page_content');
_

これにより、その特定の関数のキャッシュがクリアされるため、次に呼び出されたときに、あたかも新しいデータのようにデータが構築されます。

これは静的キャッシュパターンの基本的な使用法に過ぎません。詳細情報と例は drupal_static() 自体のドキュメントページにあります。

35
Clive

詳細な情報は http://blogs.sourceallies.com/2012/02/static-caching-in-drupal/ で取得できます。ここからの引用です:

...キャッシング(静的キャッシングだけでなく、あらゆる種類のもの)は責任を持って行われます。キャッシュを過度に使用すると、メモリがフラッディングし、トラフィックの多いWebサイトがクラッシュする可能性があります。また、生成にコストがかかる大規模なデータ構造にはキャッシングを使用する必要があることも覚えておいてください。最後に、キャッシュが再び必要になることが確実にわかっている場合にのみ、キャッシュを使用してください(Drupalのメニューデータなど)。名前、住所、色のリストを二度と使用しない場合は、そのリストをキャッシュしても意味がありません。これは、新しいタイヤを装着した後、古いタイヤを節約するようなものです。

3
Suresh Kumara