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의 Magic Constants 중 하나입니다 .

상수가 포함 된 함수의 이름으로 문자열을 반환하면됩니다.

예를 들면 다음과 같습니다.

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의 정적 변수에 대해 잘 알고 있습니까?
Clive

1
첫 번째 의견에, 두 번째를 보강하면, '캐시'는 if성명서 의 TRUE 지점에 생성됩니다
Jimajamma

1
@Jimajamma의 말과 drupal_static그것을 사용하는 시스템의 모든 기능에 대한 캐시 레지스트리 를 유지 한다는 사실 .
Clive

1
왜이되는 EntityReference에 말을합니까 : 어쨌든 - 이것은 내 PHP 무지의 쇼케이스 수 있지만, 수 drupal_static, 대신 &drupal_static?
Artur

3

자세한 정보는 http://blogs.sourceallies.com/2012/02/static-caching-in-drupal/ 에서 얻을 수 있습니다. 인용문은 다음과 같습니다.

... 캐싱 (정적 캐싱이 아닌 모든 종류의 캐싱)은 책임있는 방식으로 수행되어야합니다. 캐싱을 과도하게 사용하면 트래픽이 많은 웹 사이트에 충돌을 일으킬 수있는 메모리가 넘칩니다. 캐싱은 생성하는 데 비용이 많이 드는 대규모 데이터 구조에 사용해야합니다. 마지막으로, 캐싱하는 것이 다시 필요하다는 것을 확실히 알고있는 경우에만 캐싱을 사용하십시오 (예 : Drupal의 메뉴 데이터). 해당 목록을 다시 사용하지 않을 경우 이름, 주소 또는 색상 목록을 캐싱 할 필요가 없습니다. 새 타이어를 착용 한 후 오래된 자동차 타이어를 절약하는 것과 같습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.