PHP之__aotoload()自动加载机制

  1 类文件加载机制。
  2     按需加载。
  3     也叫自动加载机制。
  4 
  5     不同模块下同时使用同一个类文件 会出现多次加载。
  6 
  7     统一把类文件加载到一个文件中 但是 会出现不使用的类文件
  8 
  9     这个时候php内部出现了自动加载机制。
 10 
 11     自动加载机制的要求是:
 12         当需要某个类文件时候
 13         未定义
 14 
 15 
 16         自动加载函数:__autoload()函数
 17 
 18         好处是:实现按需加载。一个类一旦被加载到内存中就不会在加载啦。
 19 
 20         class Test{
 21 
 22             public function __autoload($class_name){        //时候时候执行,是在程序需要类文件的时候,php内部会自动调用该函数
 23                 //当需要某个类文件时,只需传入类名即可
 24                 require './'.$class_name.'.class.php';
 25             }
 26         }
 27 
 28 
 29     自动加载业务逻辑核心, 确定类文件与类文件地址对应关系  
 30         demo:
 31             Tool:
 32                 ImageTool.class.php
 33                 FileTool.class.php
 34             Core:
 35                 LibCore.class.php
 36                 DbCore.class.php
 37 
 38         public function __autoload($class_name){
 39 
 40             // 第一种 自动加载映射列表
 41             $class_list=array(
 42                 'LibCore'=>'./LibCore.class.php',
 43                 'DbCore'=>'./DbCore.class.php',
 44                 //'类名'=>'文件地址'
 45             );
 46 
 47             //先判断类文件是否存在映射列表中
 48             if(isset($class_list[$class_name])){
 49                 require $class_list[$class_name]; //直接加载即可  。效率高。
 50             }
 51 
 52             //第二种就是 映射列表+规律可循的进行混合
 53 
 54             //需要判断传入进来的$class_name 对应的类文件存储在什么位置
 55             if('core' == substr($class_name,-4)){   //获取类名字中的后四位
 56                 require './'.$class_name.'class.php';
 57             }elseif('Tool' == substr($class_name, -4)){
 58                 require './'.$class_name.'class.php';
 59             }
 60         }                
 61 
 62 
 63 自定义类文件自动加载        
 64     
 65         用到一个函数:spl_autoload_register('自动加载的函数名称')
 66 
 67         因为项目需求 可以会出现多个自动加载,在各个模块开发中
 68         以及在第三方的模块中也可能用到,所以用户自定义自动加载函数是非常方便的
 69 
 70         demo:
 71             Tool:
 72                 ImageTool.class.php
 73                 FileTool.class.php
 74             Core:
 75                 LibCore.class.php
 76                 DbCore.class.php
 77 
 78         spl_autoload_register('myAutoload');  //自定义自动加载        
 79         public function myAutoload($class_name){
 80 
 81             // 第一种 自动加载映射列表
 82             $class_list=array(
 83                 'LibCore'=>'./LibCore.class.php',
 84                 'DbCore'=>'./DbCore.class.php',
 85                 //'类名'=>'文件地址'
 86             );
 87 
 88             //先判断类文件是否存在映射列表中
 89             if(isset($class_list[$class_name])){
 90                 require $class_list[$class_name]; //直接加载即可  。效率高。
 91             }
 92 
 93             //第二种就是 映射列表+规律可循的进行混合
 94 
 95             //需要判断传入进来的$class_name 对应的类文件存储在什么位置
 96             if('core' == substr($class_name,-4)){   //获取类名字中的后四位
 97                 require './'.$class_name.'class.php';
 98             }elseif('Tool' == substr($class_name, -4)){
 99                 require './'.$class_name.'class.php';
100             }
101         }                
102 
103 trigger-error

 

posted @ 2016-12-01 18:03  被时光移动的城市  阅读(743)  评论(0编辑  收藏  举报