autoload.lib
上传用户:xiao730204
上传日期:2007-01-04
资源大小:141k
文件大小:9k
源码类别:

WEB邮件程序

开发平台:

PHP

  1. <?php
  2. /*
  3. Php autoloader, even implements a rudimentry example of libary
  4. modularization and clode cleanlyness.
  5. Note that it does have some performance issues when using this
  6. program to load massive ammounts of code / files.
  7. There is a optimizer library builder.
  8. GLOBAL variable items :
  9. AutoLoad - Function
  10. $PHP_AUTO_LOADED_FILES              = CACHE HASH ARRAY
  11. $PHP_AUTO_LOADED_FILES_ORDER        = ARRAY_STACK
  12. $PHP_AUTO_LOADED_OPTIMIZED_MODE     = 0/1
  13. $PHP_AUTO_LOADER_DEBUG              = 0/1
  14. $PHP_AUTO_LOAD_SEARCH_PATH          = ARRAY_STACK
  15. Two global functions :
  16. AutoLoad( 'myobject/functionname here', 'my file ext here - otherwize .object is assumed' );
  17. AutoLoadOptimize( './foo.lib' );
  18. AutoLoadDealloc(); # Deallocates all memory that it was using
  19. */
  20. if ( $PHP_AUTO_LOAD_LIB == 0 || ! isset( $PHP_AUTO_LOAD_LIB ) ) {
  21.    $PHP_AUTO_LOAD_LIB = 1;
  22. }
  23. if ( ! defined( $PHP_AUTO_LOADER_DEBUG ) ) {
  24.    $PHP_AUTO_LOADER_DEBUG = 0;
  25. }
  26. if ( ! defined( $PHP_AUTO_LOADER_FILES ) ) {
  27.    $PHP_AUTO_LOADED_FILES = Array();
  28. }
  29. if ( ! defined( $PHP_AUTO_LOADED_FILES_ORDER ) ) {
  30.    $PHP_AUTO_LOADED_FILES_ORDER = Array();
  31. }
  32. if ( ! defined( $PHP_AUTO_LOAD_SEARCH_PATH ) ) {
  33.    $PHP_AUTO_LOAD_SEARCH_PATH = Array();
  34. }
  35. $PHP_AUTO_LOADED_OPTIMIZED_MODE = 0;
  36. /*
  37. Let's not set this so that the user can do :
  38. include( './myautooptimized.lib' );
  39. include( './lib/autoload.lib' );
  40. AutoLoad( 'Foo' );
  41. if ( ! defined( $PHP_AUTO_LOADED_OPTIMIZED_MODE ) ) {}
  42. */
  43. if ( ! function_exists( 'phpautoloader' ) ) {
  44. class PhpAutoLoader {
  45.    var $dir_delim;
  46.    Function PhpAutoLoader() {
  47.       $this->dir_delim = '/';
  48.    }
  49.    Function AddToSearchPath( $this_dir ) {
  50.       global $PHP_AUTO_LOAD_SEARCH_PATH;
  51.       $PHP_AUTO_LOAD_SEARCH_PATH[] = $this_dir;
  52.    }
  53.    Function ImportSearchPath() { /* Deprecated */ } 
  54.    Function ExportSearchPath() { /* Deprecated */ }
  55.    Function DebugMessage( $message, $severe = 0 ) {
  56.       global $PHP_AUTO_LOADER_DEBUG;
  57.       if ( $PHP_AUTO_LOADER_DEBUG == 1 ) {
  58.       echo( '<!-- ' . $message . ' -->' . "n" );
  59.          if ( $severe == 1 ) { 
  60.             echo( '<font color="#ff0000">' ); 
  61.          }
  62.       echo( 'AUTOLOAD: ' . $message . '<br>' . "n" );
  63.          if ( $severe == 1 ) { 
  64.             echo( '</font>' ); 
  65.          }
  66.       }
  67.    }
  68.    Function AutoLoad( $object_name, $type = '.object' ) {
  69.       global $PHP_AUTO_LOADED_FILES;
  70.       global $PHP_AUTO_LOADED_FILES_ORDER;
  71.       global $PHP_AUTO_LOADED_OPTIMIZED_MODE;
  72.       global $PHP_AUTO_LOAD_SEARCH_PATH;
  73.       if ( $PHP_AUTO_LOADED_OPTIMIZED_MODE ) {
  74.          $this->DebugMessage( 'CACHE STATE : Running in optimized mode' );
  75.          return 1;
  76.       }
  77.       if ( $PHP_AUTO_LOADED_FILES[ $object_name . $type ] == 1 ) {
  78.          $this->DebugMessage( 'CACHE STATE : Loaded already : ' . $object_name . $type );
  79.          return 1;
  80.       }
  81.       if ( ! is_array( $PHP_AUTO_LOAD_SEARCH_PATH ) ) {
  82.          $this->DebugMessage( 
  83.             'PHP_AUTO_LOAD_SEARCH_PATH is not usable it is not an array!',
  84.             1
  85.          );
  86.          return 0;
  87.       }
  88.       for( $i = 0; $i < count( $PHP_AUTO_LOAD_SEARCH_PATH ) ; $i++ ) {
  89.          $short_path = 
  90.             $PHP_AUTO_LOAD_SEARCH_PATH[ $i ] . 
  91.                $this->dir_delim . $object_name;
  92.          // -- JEO - This is expensive --
  93.          //$this->DebugMessage( 'Searching for file : ' . $short_path . $type );
  94.          $this_file        = $short_path . $type;
  95.          $this_file_auto   = $short_path . '.auto';
  96.          if ( file_exists( $this_file ) ) {
  97.             /* We've found the item */
  98.             $this->DebugMessage( 'STATE : LOADING : ' . $object_name . $type );
  99.             /* 
  100.             We've placed the attempt to load here since someone might 
  101.             decided to have a "loop" created by asking for a file we are 
  102.             already attempting to load
  103.             */
  104.             $PHP_AUTO_LOADED_FILES[ $object_name . $type ] = 1;
  105.             /* Look for a .auto to make it autoload prereqs */
  106.             if ( file_exists( $this_file_auto ) ) {
  107.                 $this->DebugMessage( 'Loading auto file : ' . $this_file_auto );
  108.                 include( $this_file_auto );
  109.             }
  110.             $this->DebugMessage( 'LOADING : ' . $this_file );
  111.             include( $this_file );
  112.             $PHP_AUTO_LOADED_FILES_ORDER[] = $this_file;
  113.             return 1;
  114.          }
  115.       } /* End search */
  116.       /* Default fall through... unable to find item */
  117.       $this->DebugMessage( 'Could not find : ' . $object_name . $type, 1 );
  118.       return 0;
  119.    }
  120. Function AutoLoadOptimize( $output_library ) {
  121.    global $PHP_AUTO_LOADED_FILES_ORDER;
  122.    global $PHP_AUTO_LOADED_OPTIMIZED_MODE;
  123.    global $PHP_AUTO_LOAD_SEARCH_PATH;
  124.    if ( $PHP_AUTO_LOADED_OPTIMIZED_MODE == 1 ) {
  125.       /* Reasoning :
  126.       To create a optimized library all of the source must be present 
  127.       */
  128.       return 1;
  129.    }
  130.    echo( '<br>' ) ;
  131.    echo( 'Preparing to write optimized library : ' );
  132.    echo( '<ul>' );
  133.    $file_output = '';
  134.    $file_output = 
  135.       trim( '<?php $PHP_AUTO_LOADED_OPTIMIZED_MODE = 1; ?>' );
  136.    $ac = count( $PHP_AUTO_LOADED_FILES_ORDER );
  137.    for( $x = 0; $x < $ac; $x++ ) {
  138.       $file_name = $PHP_AUTO_LOADED_FILES_ORDER[ $x ];
  139.       /* We are going to asume if a object and it's .auto were loaded all 
  140.          prereqs were met so therefor we dont need to do the .auto */
  141.       if ( ! ereg( '.auto$', $file_name, $regs ) ) {
  142.       echo( '<li>' . $file_name . " - $xn" );
  143.       $file_output .= trim( '<?php
  144. if ( $PHP_AUTO_LOADED_FILES[ "' . $file_name . '" ] != 1 ) {
  145. /* ' . $file_name . ' */
  146. $PHP_AUTO_LOADED_FILES[ "' . $file_name . '" ]  = 1;
  147. $PHP_AUTO_LOADED_FILES_ORDER[]                  = "' . $file_name . '";
  148. ?>' ) ;
  149.       /* Read the file in for processing */ 
  150.       $temp_arr = file( $file_name );
  151.       for( $i = 0; $i < count( $temp_arr ); $i++ ) {
  152.          $good_stuff = '';
  153.          $good_stuff = $temp_arr[ $i ];
  154.          /* This peels off the comments # and  */
  155.          // $good_stuff = ereg_replace( '//(.*)+', '', $good_stuff );
  156.          // $good_stuff = ereg_replace( '#(.*)+', '', $good_stuff );
  157.          list( $mo_good_stuff, $bad ) = split( '//', $good_stuff );
  158.          list( $good_stuff, $bad ) = split( '#', $mo_good_stuff );
  159.          /* This peels off the other comments */
  160.          $good_stuff = ereg_replace( '/*(.*)*/', '', $good_stuff );
  161.          /* Strip most of the whitespace crap out */
  162.          $file_output .= ' ' . trim( $good_stuff ) . ' ';
  163.          //$file_output .= $good_stuff;
  164.       }
  165.       $file_output .= trim( '<?php } /* End if file is autoloaded */ ?>' );
  166.       }
  167.    }
  168.    echo( '</ul>' );
  169.   if ( $fh = fopen( $output_library, 'w' ) ) {
  170.       $file_output = 
  171.          str_replace( '?> <?php', '?><?php', $file_output );
  172.       fwrite( $fh, $file_output, strlen( trim( $file_output ) ) );
  173.       fclose( $fh );
  174.       echo( '<b>File written : ' . $output_library . '</b>' );
  175.    } else {
  176.       echo( '<font color="#FF0000"><center><H3>FAILED TO WRITE FILE!!!!!</H3></font></center>' );
  177.    }
  178. }
  179.    Function Deallocate() {
  180.       global $PHP_AUTO_LOADED_FILES_ORDER;
  181.       global $PHP_AUTO_LOADED_FILES;
  182.       global $PHP_AUTO_LOAD_SEARCH_PATH;
  183.       $PHP_AUTO_LOADED_FILES_ORDER = Array();
  184.       $PHP_AUTO_LOADED_FILES       = Array();
  185.       $PHP_AUTO_LOAD_SEARCH_PATH   = Array();
  186.    }
  187. } /* End AutoLoader.class */
  188. } /* End if autoloader defined */
  189. if ( ! function_exists( 'autoloaddeallocate' ) ) {
  190. /* Global Namespace export */
  191. Function AutoLoadDeallocate() {
  192.    $tmp_class = new PhpAutoLoader();
  193.    $tmp_class->Deallocate();
  194. }
  195. } /* End if autoloaddeallocate is defined */
  196. if ( ! function_exists( 'autoload' ) ) {
  197. Function AutoLoad( $object_name, $type = '.object' ) {
  198.    global $PHP_AUTO_LOADED_FILES_ORDER;
  199.    global $PHP_AUTO_LOAADED_FILES;
  200.    global $PHP_AUTO_LOADED_OPTIMIZED_MODE;
  201.    global $PHP_AUTO_LOAD_SEARCH_PATH;
  202.    global $PHP_AUTO_LOADER_DEBUG;
  203.    $tmp_class = new PhpAutoLoader();
  204.    if ( is_array( $object_name ) ) {
  205.       for( $i = 0; $i < count( $object_name ); $i++ ) {
  206.          $a_object = $object_name[ $i ];
  207.          $tmp_class->AutoLoad( $a_object, $type );
  208.       }
  209.       return 1;
  210.    } else {
  211.    return $tmp_class->AutoLoad( $object_name, $type );
  212.    }
  213. }
  214. } /* End if autoload is defined */
  215. if ( ! function_exists( 'autoloadoptimize' ) ) {
  216. Function AutoLoadOptimize( $output_lib ) { 
  217.    global $PHP_AUTO_LOAADED_FILES_ORDER;
  218.    global $PHP_AUTO_LOAADED_FILES;
  219.    global $PHP_AUTO_LOADED_OPTIMIZED_MODE;
  220.    global $PHP_AUTO_LOAD_SEARCH_PATH;
  221.    $tmp_class = new PhpAutoLoader();
  222.    return $tmp_class->AutoLoadOptimize( $output_lib );
  223. }
  224. } /* end if autoloadoptimize exists */
  225. if ( ! function_exists( 'autoloadaddpath' ) ) {
  226. Function AutoLoadAddPath( $path_elem ) {
  227.    global $PHP_AUTO_LOAADED_FILES_ORDER;
  228.    global $PHP_AUTO_LOAADED_FILES;
  229.    global $PHP_AUTO_LOADED_OPTIMIZED_MODE;
  230.    global $PHP_AUTO_LOAD_SEARCH_PATH;
  231.    $tmp_class = new PhpAutoLoader();
  232.    if ( is_array( $path_elem ) ) {
  233.       for( $i = 0; $i < count( $path_elem ); $i++ ) { 
  234.          $tmp_class->AddToSearchPath( $path_elem[ $i ] );
  235.       }
  236.    } else {
  237.    $tmp_class->AddToSearchPath( $path_elem );
  238.    }
  239. }
  240. } /* end if autoload add path defined */
  241. ?>