MVC自动加载实现

自动加载

总结:

  控制器类(可增加)

  模型类(可增加)

  框架核心类(确定的)

对于所有的类,分成两方面考虑:

  一:可以确定的类。(当自动加载方法确定时,类文件已经确定了)

  二:可以被增加的类。(当自动加载方法确定时,没有办法确定)

  对已经确定的类,采用最简洁的方式进行加载。

  对于需要增加的类,需要通过类名 的规律,完成其位置的判断,进而完成自动加载。

规律是:

  XXXController结尾的,控制器类,在当前平台下controller目录将其载入

  XXXModel结尾的,模型类,当前平台下的model目录将其载入。

编码实现:

  在入口中增加自动加载方法,并注册:

    function userAutoload($class_name){

    }

    spl_autoload_register('userAutoload');

  实现 userAutoload:

  核心类加载:

    function userAutoload($class_name){

      $framework_class_list = array(

        'Controller' => '.framework/Controller.class.php',

        'Model' => '.framework/Model.class.php',

        'Factroy' => '.framework/Factroy.class.php',

        'MySQLDB' => '.framework/MySQLDB.class.php',

      )

      if(isset($framework_class_list[$class_name])){

        require $framework_class_list[$class_name];

      }

    }

   可增加类(控制器,模型):

    function userAutoload($class_name){

      $framework_class_list = array(

        'Controller' => '.framework/Controller.class.php',

        'Model' => '.framework/Model.class.php',

        'Factroy' => '.framework/Factroy.class.php',

        'MySQLDB' => '.framework/MySQLDB.class.php',

      )

      if(isset($framework_class_list[$class_name])){

        require $framework_class_list[$class_name];

      }else if(substr($class_name,-10) == 'Controller'){

        require './application/'.PLATFORM.'/Controller/'.$class_name.'.class.php';

      }else if(substr($class_name,-5) == 'Model'){

        require './application/'.PLATFORM.'/Model/'.$class_name.'.class.php';

      }

    } 

  测试:

  将项目所有对类文件的加载都删掉!

posted @ 2019-06-04 09:35  zsyzsyzsyzsyzsy  阅读(113)  评论(0编辑  收藏  举报