zoukankan      html  css  js  c++  java
  • 电子商城实录------定义init初始化的方法

    路由方法的设置

    //路由方法
    private static function dispatch(){
    //获取控制器名称(类比:英文单词的后缀)
    $controller_name=CONTROLLER."Controller";
    //获取方法名

    $action_name=ACION."Action";

    //实例化控制器对象
    $controller=new $controller_name();
    //调用方法
    $controller->$action_name();


    }

    实现自动加载

    自动加载联想到__autoload

    面试题:__autoload是函数还是方法?

    波利亚《怎样解题表》提出“回到定义中去”

    函数的定义:普通函数,function来定义

    方法的定义:类中定义的函数,和类挂钩。

    即使在类中定义方法名字为__autoload,它也不能起到自动加载的作用

    解决方案

    1.写在类的外面

    2.在类中实现

    1) 写一个方法实现自动加载,如下:

    //自动加载
    private static function __autoload(){



    }
    //自动加载功能,实现控制器和数据库模型
    //GoodsController GoodsModel
    private static function load($classname){
    if(substr($classname,-10)=="Controller"){

    include CUR_CONTROLLER_PATH."{$classname}.class.php";
    }elseif (substr($classname, -5)=='Model'){
    //载入数据库模型
    include MODEL_PATH."{$classname}.class.php";
    }else{


    }



    }

    第二步   类中注册方法

    //自动加载功能,实现控制器和数据库模型
    //GoodsController GoodsModel
    private static function load($classname){
    if(substr($classname,-10)=="Controller"){

    include CUR_CONTROLLER_PATH."{$classname}.class.php";
    }elseif (substr($classname, -5)=='Model'){
    //载入数据库模型
    include MODEL_PATH."{$classname}.class.php";
    }else{


    }



    }

    2)

    //注册为自动加载
    private static function autoload(){
    $arr=array(__CLASS__,'load');
    //__CLASS__获取当前的类名
    spl_autoload_register($arr);


    }

    3)在run中调用

    public static function run(){
    //echo "hello,wrold!";
    self::init();
    self::autoload();
    self::dispatch();

    }

    4)写一个控制器进行测试

     代码如下:

    <?php
    //后台首页控制器
    class IndexController{

    public function indexAction(){


    echo "admin....index...";


    }


    }

    ?>

    输出结果如下:  

    http://localhost:8989/shopcz1/index.php

     

    代表成功

    整体代码如下:

    Framework.class.php

    <?php
    //核心启动类
    class Framework{
    public static function run(){
    //echo "hello,wrold!";
    self::init();
    self::autoload();
    self::dispatch();

    }
    //初始化方法
    private static function init(){

    //定义路径常量
    define("DS",DIRECTORY_SEPARATOR);
    define("ROOT",getcwd().'/');
    define("APP_PATH",ROOT.'application'.DS);
    define("FRAMEWORK_PATH",ROOT.'framework'.DS);
    define("PUBLIC_PATH",ROOT.'public'.DS);
    define("GONFIG_PATH",APP_PATH."config".DS);
    define("CONTROLLER_PATH",APP_PATH."controllers".DS);
    define("MODEL_PATH",APP_PATH."models".DS);
    define("VIEW_PATH",APP_PATH.'views'.DS);
    define("CORE_PATH",FRAMEWORK_PATH.'core'.DS);
    define("DB_PATH",FRAMEWORK_PATH.'databases'.DS);
    define("LIB_PATH",FRAMEWORK_PATH.'libraries'.DS);
    define("HELPER_PATH",FRAMEWORK_PATH.helpers);
    define("UPLOAD_PATH",PUBLIC_PATH.'uploads'.DS);
    //获取参数p ,c,a
    define('PLATFORM', isset($_GET['p'])?$_GET['p']:"admin");
    define('CONTROLLER',isset($_GET['c'])?ucfirst($_GET['c']):"Index");
    define('ACTION',isset($_GET['a'])?$_GET['a']:"index");
    //设置当前控制器和视图
    define("CUR_CONTROLLER_PATH",CONTROLLER_PATH.PLATFORM.DS);
    define("CUR_VIEW_PATH",VIEW_PATH.PLATFORM.DS);





    }
    //路由方法
    private static function dispatch(){
    //获取控制器名称
    $controller_name=CONTROLLER."Controller";
    //获取方法名

    $action_name=ACTION."Action";

    //实例化控制器对象
    $controller=new $controller_name();
    //调用方法
    $controller->$action_name();


    }
    //注册为自动加载
    private static function autoload(){
    $arr=array(__CLASS__,'load');
    //__CLASS__获取当前的类名
    spl_autoload_register($arr);


    }
    //自动加载功能,实现控制器和数据库模型
    //GoodsController GoodsModel
    private static function load($classname){
    if(substr($classname,-10)=="Controller"){

    include CUR_CONTROLLER_PATH."{$classname}.class.php";
    }elseif (substr($classname, -5)=='Model'){
    //载入数据库模型
    include MODEL_PATH."{$classname}.class.php";
    }else{


    }



    }
    }

    ?>

    测试代码:

    IndexController.class.php

    <?php
    //后台首页控制器
    class IndexController{

    public function indexAction(){


    echo "admin....index...";


    }


    }

    ?>

  • 相关阅读:
    css3样式二
    CSS3样式
    css基础样式四
    css样式基础三
    CSS样式基础二
    Css样式基础
    html(二)
    html(一)
    Linux 下 Memcached 缓存服务器安装配置
    java.lang.OutOfMemoryError: Java heap space解决方法
  • 原文地址:https://www.cnblogs.com/zhouxingzhi/p/10306875.html
Copyright © 2011-2022 走看看