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

Answers:


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()上找到更多信息和示例。


谢谢您的回答,我现在知道此FUNCTION的含义了,但更进一步,此$ content_block变量首先在哪里创建,因为我在此代码中只能找到从缓存中检索数据的位置,而在哪里创建了该缓存?首先,谢谢!
Drupal cai 2012年

1
您一般都熟悉PHP中的静态变量吗?
克莱夫(Clive)

1
到第一个注释,然后增加第二个注释,在该if语句的TRUE分支中创建“缓存”
Jimajamma 2012年

1
@Jimajamma所说的内容,以及drupal_static为使用它的系统中所有功能保留高速缓存注册表的事实。
克莱夫(Clive)

1
这可能是我对PHP的无知的一个展示,但是-无论如何:为什么他们在实体引用中说:drupal_static而不是&drupal_static
Artur 2012年

3

有关详细信息,请访问http://blogs.sourceallies.com/2012/02/static-caching-in-drupal/。这是它的引文:

...以任何负责任的方式进行缓存(任何形式的缓存,而不仅仅是静态缓存)。过度使用缓存会淹没内存,这可能会使高流量的网站崩溃。还要记住,缓存应用于生成昂贵的大型数据结构。最后,仅当您确定再次需要缓存时(例如,Drupal中的菜单数据),才使用缓存。如果永远不会再使用名称,地址或颜色列表,则缓存该列表是没有意义的。这就像放上新轮胎后节省旧轮胎。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.