如何實現一個php框架系列文章【2】實現類的自動加載

根據前一篇文章的設計原則,咱們暫時把php文件分爲3類,類名和文件名都遵照以下約定。

 

 

 

  類名 文件名 路徑
模型類m {$app}Mod  {$app}.mod.php {$app}/model  
控制器類c {$app}Ctl {$app}.ctl.php {$app}/control
其餘 {$app} {$app}.cls.php {$app}/class

能夠實現一個簡單的autoload函數php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function  uct_autoload( $class_name ) {
     $auto_path  array (
         'ctl'  =>  'control' ,
         'mod'  =>  'model' ,
         'cls'  =>  'class' ,        
     );
     $key        strtolower ( substr ( $class_name , -3));
     if  (isset( $auto_path [ $key ])) {
         $dir  $auto_path [ $key ] . DS .  strtolower ( substr ( $class_name , 0, -3)) .  '.'  $key  '.php' ;
     else  {
         $dir  'class'  . DS .  strtolower ( $class_name ) .  '.cls.php' ;
     }   
   
     if  (! empty ( $GLOBALS [ '_UCT' ][ 'autoload' ])) {
         foreach  ( $GLOBALS [ '_UCT' ][ 'autoload' as  $app ) {
             if  ( file_exists (UCT_PATH .  'app'  . DS .  $app  . DS .  $dir )) {
                 return  include  UCT_PATH .  'app'  . DS .  $app  . DS .  $dir ;
             }   
         }   
     }   
        
     if  ( file_exists (UCT_PATH .  'framework'  . DS .  $dir )) {
         return  include  UCT_PATH .  'framework'  . DS .  $dir ;
     }   
     echo  'auto_load not found! '  $class_name ;
     exit (1);
}

 

若是想使用另外一個模塊裏的函數能夠使用app

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function  uct_use_app( $app ) {
     if  ( empty ( $GLOBALS [ '_UCT' ][ 'autoload' ])) {
         $GLOBALS [ '_UCT' ][ 'autoload' ] =  array (
             $app
         );
         return  true;
     }
     if  (!in_array( $app $GLOBALS [ '_UCT' ][ 'autoload' ])) {
         array_unshift ( $GLOBALS [ '_UCT' ][ 'autoload' ],  $app );
         return  true;
     }
    
     return  false;
}
相關文章
相關標籤/搜索