drupal_static () usa uma variável FUNCTION, o que significa?

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

Este trecho é colado no common.inc. Passamos um __FUNCTION__para, drupal_static()mas não sei o que essa variável significa. Isso significa um cache para a própria função externa? Como funciona? Não vejo nenhum dado manipulado dentro da função antes que ela retorne $content_block.

Drupal cai
fonte

Respostas:

34

__FUNCTION__é uma das chamadas constantes mágicas do PHP.

Tudo o que faz é retornar uma string com o nome da função na qual a constante está contida.

Por exemplo:

function my_strangely_named_function() {
  print __FUNCTION__;
}

O texto acima imprimirá 'minha_strangely_named_function'.

O Drupal usa essa constante com seu cache estático para que cada cache seja identificável de qualquer outra função e, como tal, possa ser identificado de forma limpa.

Para usar uma versão resumida do seu código:

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

Qualquer outra função no ciclo de vida do Drupal pode chamar:

drupal_static_reset('drupal_set_page_content');

E isso limpará o cache dessa função específica, para que da próxima vez que for chamado, os dados sejam construídos como se fossem novos.

Esse é apenas o uso básico do padrão de cache estático; você pode encontrar mais informações e exemplos na página de documentaçãodrupal_static() .

Clive
fonte
Obrigado pela sua resposta, agora eu entendo o que essa FUNCTION significa, mas mais ainda, onde está a variável $ content_block criada pela primeira vez, pois tudo o que posso encontrar neste código é recuperar dados do cache, mas onde está o cache criado em o primeiro lugar, obrigado!
amigos estão dizendo
1
Você está familiarizado com variáveis ​​estáticas no PHP em geral?
Clive
1
ao primeiro comentário, e aumentando o segundo, o 'cache' é criado no ramo VERDADEIRO da ifdeclaração
Jimajamma
1
O que o @Jimajamma disse, além do fato de drupal_staticmanter um registro de caches para todas as funções no sistema que o utilizam.
Clive
1
Esta poderia ser uma vitrine do meu PHP ignorância, mas - de qualquer maneira: por que eles dizem em EntityReference: drupal_staticem vez de &drupal_static?
Artur
3

Informações detalhadas podem ser encontradas em http://blogs.sourceallies.com/2012/02/static-caching-in-drupal/ . Aqui está uma citação:

... o cache (de qualquer tipo, não apenas o cache estático) deve ser feito de maneira responsável. O uso excessivamente zeloso de armazenamento em cache inunda a memória, o que pode travar sites de alto tráfego. Lembre-se também de que o cache deve ser usado para grandes estruturas de dados que são caras de gerar. Por fim, use o cache apenas se tiver certeza de que o cache será novamente necessário (por exemplo, dados de menu no Drupal). Não faz sentido colocar em cache uma lista de nomes, endereços ou cores, se essa lista nunca for usada novamente. Seria como economizar os pneus velhos depois de colocar os novos.

Suresh Kumara
fonte