Nuestros mejores programadores han agotado sus depósitos de café, en su búsqueda diariamente por la solución, hasta que Elena halló la respuesta en GitHub y en este momento la compartimos aquí.
&drupal_static($name, $default_value = NULL, $reset = FALSE)
Proporciona central static almacenamiento variable.
Todas las funciones que requieren un static variable para persistir o almacenar en caché los datos dentro de una solicitud de una sola página, se recomienda utilizar esta función a menos que esté absolutamente seguro de que static no será necesario restablecer la variable durante la solicitud de página. Centralizando static almacenamiento variable a través de esta función, otras funciones pueden confiar en una API consistente para restablecer cualquier otra función static variables.
Ejemplo:
functionexample_list($field='default')$examples=&drupal_static(__FUNCTION__);if(!isset($examples))// If this function is being called for the first time after a reset,// query the database and execute any other code needed to retrieve// information....if(!isset($examples[$field]))// If this function is being called for the first time for a particular// index field, then execute code needed to index the information already// available in $examples by the desired field....// Subsequent invocations of this function for a particular index field// skip the above two code blocks and quickly return the already indexed// information.return$examples[$field];functionexamples_admin_overview()// When building the content for the overview page, make sure to get// completely fresh information.drupal_static_reset('example_list');...
En algunos casos, una función puede tener la certeza de que no existe un caso de uso legítimo para restablecer la static variable. Esto es raro, porque al escribir una función, es difícil pronosticar todas las situaciones en las que se utilizará. Una pauta es que si una función static variable no depende de ninguna información fuera de la función que pueda cambiar durante una solicitud de una sola página, entonces está bien usar el “static”palabra clave en lugar de la función drupal_static ().
Ejemplo:
functionmymodule_log_stream_handle($new_handle=NULL)static$handle;if(isset($new_handle))$handle=$new_handle;return$handle;
En algunos casos, una función necesita un reinicio static variable, pero la función se llama muchas veces (más de 100) durante una solicitud de página única, por lo que cada microsegundo de tiempo de ejecución que se puede eliminar de la función cuenta. Estas funciones pueden usar una variante más engorrosa pero más rápida de llamar a drupal_static (). Funciona almacenando la referencia devuelta por drupal_static () en la propia función de llamada. static variable, eliminando así la necesidad de llamar a drupal_static () para cada iteración de la función. Conceptualmente, reemplaza:
$foo=&drupal_static(__FUNCTION__);
con:
// Unfortunately, this does not work.static$foo=&drupal_static(__FUNCTION__);
Sin embargo, la línea de código anterior no funciona, porque PHP solo permite static variables para ser inicializadas por valores literales, y no permite static variables a asignar a las referencias.
- http: //php.net/manual/language.variables.scope.php#language.variables.sc …
- http: //php.net/manual/language.variables.scope.php#language.variables.sc …
El siguiente ejemplo muestra la sintaxis necesaria para evitar ambas limitaciones. Para obtener comparativas y más información, consulte https://www.drupal.org/node/619666.
Ejemplo:
functionexample_default_format_type()// Use the advanced drupal_static() pattern, since this is called very often.static$drupal_static_fast;if(!isset($drupal_static_fast))$drupal_static_fast['format_type']=&drupal_static(__FUNCTION__);$format_type=&$drupal_static_fast['format_type'];...
Parámetros
$ nombre: Nombre globalmente único para la variable. Para una función con solo uno static, variable, se recomienda el nombre de la función (por ejemplo, a través de la constante __FUNCTION__ mágica de PHP). Para una función con múltiples static las variables agregan un sufijo distintivo al nombre de la función para cada una.
$ valor_predeterminado: Valor predeterminado opcional.
$ restablecer: VERDADERO para restablecer una o todas las variables. Este parámetro solo se usa internamente y no debe pasarse; use drupal_static_reset () en su lugar. (El valor de retorno de esta función no debe usarse cuando se pasa TRUE).
Valor devuelto
Devuelve una variable por referencia.
Ver también
drupal_static_reset ()
Expediente
- core / includes / bootstrap.inc, línea 871
- Funciones que deben cargarse en cada solicitud de Drupal.
Código
function&drupal_static($name,$default_value=NULL,$reset=FALSE)array_key_exists($name,$data))// Non-NULL $name and both $data[$name] and $default[$name] statics exist.if($reset)// Reset pre-existing static variable to its default value.$data[$name]=$default[$name];return$data[$name];// Neither $data[$name] nor $default[$name] static variables exist.if(isset($name))if($reset)// Reset was called before a default is set and yet a variable must be// returned.return$data;// First call with new non-NULL $name. Initialize a new static variable.$default[$name]=$data[$name]=$default_value;return$data[$name];// Reset all: ($name == NULL). This needs to be done one at a time so that// references returned by earlier invocations of drupal_static() also get// reset.foreach($defaultas$name=>$value)$data[$name]=$value;// As the function returns a reference, the return should always be a// variable.return$data;