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


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

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

回答:


34

__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()


あなたの答えをありがとう、私はこのFUNCTIONの意味を理解しましたが、さらに、この$ content_block変数が最初に作成された場所はどこにありますか?そもそも、ありがとう!
Drupal cai

1
一般的なPHPの静的変数に精通していますか?
クライブ

1
最初のコメントにif
追加し

1
@Jimajammaが言ったことに加えて、drupal_staticそれを使用するシステム内のすべての機能のキャッシュのレジストリを保持しているという事実。
クライブ

1
これは私のPHPの無知のショーケースかもしれませんが、とにかく:なぜ彼らはentityreference:drupal_staticではなく、と言うの&drupal_staticですか?
アルトゥール

3

詳細情報については、http://blogs.sourceallies.com/2012/02/static-caching-in-drupal/をご覧ください。ここから引用です:

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.