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__до drupal_static()а, але я не знаю, що ця змінна означає. Чи означає це кеш для самої зовнішньої функції? Як це працює? Я не бачу даних, які обробляються всередині функції, перш ніж вони повертаються $content_block.

Відповіді:


34

__FUNCTION__є однією з так званих магічних констант PHP.

Все, що він робить - це повернути рядок з назвою функції, в якій міститься константа.

Наприклад:

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() себе.


Дякую за вашу відповідь, я тепер розумію, що означає ця функція, але далі, де вперше створена ця змінна $ content_block, як я можу знайти в цьому коді - це витяг даних з кеша, але де кеш створений у перше місце, дякую!
Drupal cai

1
Ви знайомі зі статичними змінними в PHP взагалі?
Клайв

1
до першого коментаря, а доповнюючи другий, "кеш" створюється у гілці if
ІСТИНСЬКОГО

1
Що сказав @Jimajamma, плюс той факт, що drupal_staticзберігає реєстр кеш-пам'яті для всіх функцій у системі, яка ним користується.
Клайв

1
Це може бути демонстрацією мого невігластва PHP, але - у будь-якому випадку: чому вони говорять у суторефераті:, drupal_staticа не &drupal_static?
Артур

3

Детальну інформацію ви отримаєте на веб-сайті http://blogs.sourceallies.com/2012/02/static-caching-in-drupal/ . Ось цитата з нього:

... кешування (будь-якого виду, а не лише статичного кешування) повинно здійснюватися відповідально. Надмірне використання кешування заповнює пам'ять, що може призвести до краху веб-сайтів з високим трафіком. Пам'ятайте також, що кешування слід використовувати для великих структур даних, які дорого створюються. Нарешті, використовуйте кешування лише в тому випадку, якщо ви точно знаєте, що те, що ви кешуєте, буде потрібно знову (наприклад, дані меню в Drupal). Немає сенсу кешувати список імен, адрес чи кольорів, якщо цей список більше ніколи не буде використаний. Це було б як збереження старих автомобільних шин після того, як ви поставите нові.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.