You are here

autoload.module in Autoload 6

Same filename and directory in other branches
  1. 6.2 autoload.module
  2. 7.2 autoload.module
  3. 7 autoload.module

File

autoload.module
View source
<?php

/**
 * Implementation of hook_init().
 */
function autoload_init() {
  spl_autoload_register('autoload_class');
}

/**
 * Implementation of hook_flush_caches().
 */
function autoload_flush_caches() {

  // Force a rescan of the autload hook.
  autoload_get_lookup(TRUE);
}

/**
 * Autoload function for registered classes.
 */
function autoload_class($class) {
  $lookup = autoload_get_lookup();
  if (!empty($lookup[$class])) {

    // require() is safe because if the file were already included
    // autoload wouldn't have been triggered.
    $path = realpath($lookup[$class]);
    if (!empty($path)) {
      require $path;
    }
  }
}

/**
 * Build and return the lookup table for classes and interfaces.
 *
 * @return
 *   The lookup table for what classes are stored where.
 */
function autoload_get_lookup($reset = FALSE) {
  static $lookup;
  if (isset($lookup) && !$reset) {
    return $lookup;
  }
  if (!$reset && ($cache = cache_get('autoload:')) && isset($cache->data)) {
    $lookup = $cache->data;
  }
  else {

    // We need to manually call each module so that we can know which module
    // a given item came from.
    $classes = array();
    foreach (module_implements('autoload_info') as $module) {
      $class_items = call_user_func($module . '_autoload_info');
      if (isset($class_items) && is_array($class_items)) {
        foreach (array_keys($class_items) as $item) {
          $class_items[$item]['module'] = $module;
        }
        $classes = array_merge($classes, $class_items);
      }
    }

    // Alter the lookup table as defined by modules. The keys are class and interface names.
    drupal_alter('autoload_info', $classes);

    // Derive the full path name and store just the lookup table itself.
    $lookup = array();
    foreach ($classes as $class => $item) {
      $file_path = isset($item['file path']) ? $item['file path'] : drupal_get_path('module', $item['module']);
      $lookup[$class] = $file_path . '/' . $item['file'];
    }

    // Save the lookup table, then return it.
    cache_set('autoload:', $lookup);
  }
  return $lookup;
}

Functions

Namesort descending Description
autoload_class Autoload function for registered classes.
autoload_flush_caches Implementation of hook_flush_caches().
autoload_get_lookup Build and return the lookup table for classes and interfaces.
autoload_init Implementation of hook_init().