drupal_static () usa una variable FUNCTION, ¿qué 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 fragmento está pegado de common.inc. Pasamos un __FUNCTION__a drupal_static()pero no sé qué significa esta variable. ¿Significa un caché para la función externa en sí? ¿Como funciona? No veo ningún dato manejado dentro de la función antes de que regrese $content_block.

Drupal cai
fuente

Respuestas:

34

__FUNCTION__es una de las llamadas constantes mágicas de PHP.

Todo lo que hace es devolver una cadena con el nombre de la función que contiene la constante.

Por ejemplo:

function my_strangely_named_function() {
  print __FUNCTION__;
}

Lo anterior imprimirá 'my_strangely_named_function'.

Drupal utiliza esta constante con su caché estática para que cada caché sea identificable desde cualquier otra función y, como tal, pueda borrarse de manera identificable.

Para usar una versión abreviada de su código:

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

Cualquier otra función en el ciclo de vida de Drupal puede llamar a:

drupal_static_reset('drupal_set_page_content');

Y eso borrará el caché para esa función específica, de modo que la próxima vez que se llame, los datos se construirán como si fueran nuevos.

Ese es solo el uso básico del patrón de caché estático, puede encontrar más información y ejemplos en la página de documentación pordrupal_static() sí mismo.

Clive
fuente
Gracias por su respuesta, ahora entiendo qué significa esta FUNCIÓN, pero más aún, dónde se creó por primera vez esta variable $ content_block, ya que todo lo que puedo encontrar en este código es que recupera datos de la memoria caché, pero dónde se crea la memoria caché en En primer lugar, gracias!
Drupal cai
1
¿Está familiarizado con las variables estáticas en PHP en general?
Clive
1
para el primer comentario, y aumentando el segundo, se crea el 'caché' en la rama VERDADERA de la ifdeclaración
Jimajamma
1
Lo que dijo @Jimajamma, más el hecho de que drupal_staticmantiene un registro de cachés para todas las funciones en el sistema que lo usan.
Clive
1
Esto podría ser una muestra de mi ignorancia de PHP, pero, de todos modos: ¿por qué dicen en una referencia de entidad drupal_static, en lugar de &drupal_static?
Artur
3

Obtendrá información detallada en http://blogs.sourceallies.com/2012/02/static-caching-in-drupal/ . Aquí hay una cita de él:

... el almacenamiento en caché (de cualquier tipo, no solo el almacenamiento en caché estático) se debe realizar de manera responsable. El uso excesivo de la memoria caché inunda la memoria que puede bloquear sitios web de alto tráfico. Recuerde también que el almacenamiento en caché debe usarse para grandes estructuras de datos que son caras de generar. Por último, utilice el almacenamiento en caché solo si sabe con certeza que lo que almacenará en caché será necesario nuevamente (por ejemplo, datos de menú en Drupal). No tiene sentido almacenar en caché una lista de nombres, direcciones o colores si esa lista nunca se volverá a utilizar. Eso sería como salvar las llantas de su auto viejo después de poner las nuevas.

Suresh Kumara
fuente