[Drupal] How can we use drupal_static function in Drupal 7?

| | 2 min read

The drupal_static() function provides a temporary storage for data that should stick around even after execution. It also provides the central static variable storage. It preserves the data within a page request as well.

The implementation of drupal_static() function is very easy. In one of my project, I simply use this function. Let's look a sample example her,

function my_module_myfunc() {
  $data = &drupal_static(__FUNCTION__);
  if (!isset($data)) {
    // programming logic here.
  }
  return $data;
}

The variable, $data assigned to the value that is return by the drupal_static() function. For the first call, drupal_static() returns an empty value. If the $data is empty, it will go to the programming logic and assign some other values. This value will be retained and retrieve this value at the next call of the function. That means, drupal_static function checks whether the variable contains values or not. It returns value from the cache without going to the programming logic.

Now let check the implementation of drupal_static function in drupal core.

function &drupal_static($name, $default_value = NULL, $reset = FALSE) {
  static $data = array(), $default = array();
  // First check if dealing with a previously defined static variable.
  if (isset($data [$name]) || 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 ($default as $name => $value) {
    $data [$name] = $value;
  }
  // As the function returns a reference, the return should always be a variable.
  return $data;
}

Feel free to share your queries with us, hurry up. Do you need more drupal solutions? Lets find here now.