码迷,mamicode.com
首页 > Web开发 > 详细

PHP自定义框架部分知识点小结(一)

时间:2016-12-22 06:31:06      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:控制   前台   roo   sys   end   系统   大量   传值   存在   

 PHP自定义框架部分知识点小结(一)

  网络上有大量优秀的MVC框架可供使用,但自定义框架并不是为了开发一个全面的、终极的MVC框架解决方案,而是将它看作是一个很好的从内部学习PHP的机会,在此过程中,将会学习面向对象编程和MVC设计模式,并学习到开发中的一些注意事项。

  Web MVC的流程体现如下图:

技术分享

一个典型的Web MVC流程:

  1. Controller截获用户发出的请求;
  2. Controller调用对应的Model;
  3. Model调用DAO(基于PDO操作数据库的封装类)完成状态的读写操作;
  4. Controller把数据传递给View;
  5. View渲染最终结果并呈献给用户。

首先创建好相应的目录文件

假设项目名为XFrame,XFrame目录下的文件一次为:

  APP  应用目录

    ---Home  存放前台文件

         ----Controller  存放前台的控制器

         ----Model    存放前台的模型

         ----View      存放用于展示数据的视图文件

    ---Admin  存放后台文件

         ----Controller  存放后台的控制器

         ----Model    存放后台的模型

         ----View      存放用于展示数据的视图文件

  Core  存放核心文件

  Config  存放配置文件

  Public  存放公共文件

  Vendor  存放扩展文件

  index.php  入口文件

为了让自己在搭建框架时,能够准确找到相应目录下的文件,一开始就把目录设置好是非常有必要的。

 

1、设置好目录后,第一件事就是先在创建好的入口文件(index.php)中设置以下代码:

 1 <?php
 2 
 3 //增加一个入口常量,用于判断是否有权限直接进入其它文件
 4 define(‘ACCESS‘, TRUE);
 5 
 6 //加载初始化类
 7 include ‘Core/App.class.php‘;
 8 
 9 //进入到初始化类
10 //Core\App::run();
11 \Core\App::run();    //由于采用命名空间,因此访问类的时候必须带上空间

 

 

2-1、从入口文件的代码可以看出,下一步需要创建的文件是在Core目录下的App.class.php文件。

 1 <?php
 2 
 3     //使用命名空间
 4     namespace Core;
 5 
 6     //权限判断:以后的文件都会用到入口文件所定义的常量‘ACCESS’来判断
 7     if (!defined(‘ACCESS‘)) {
 8         //非法访问权限
 9         header(‘Location:/index.php‘);
10         die;
11     }
12 
13 class App{
14     //该方法就是入口文件所调用的方法,用于初始化
15     public static function run(){    
16                echo ‘success‘;
17     }

 

 

2-2、当在浏览器能看到输出相应的文字,证明能成功调用该方法,接着就要在App类中定义其它初始化的方法,用来设置字符集、定义目录常量、设置系统错误控制、解释URL、分发控制器

设置字符集:

    //设置字符集
    private static function setCharset(){
        header("content-type:text/html;charset=utf-8");
    }

定义目录常量:

//定义目录常量
    private static function setDirConst(){
        //设置根目录常量ROOT_DIR
        define(‘ROOT_DIR‘, str_replace(‘Core‘,‘‘,str_replace(‘\\‘,‘/‘,__DIR__)));
        //定义的目录常量,建议都加上‘/’
        define(‘CORE_DIR‘, ROOT_DIR.‘Core/‘);
        define(‘CONFIG_DIR‘, ROOT_DIR.‘Config/‘);
        define(‘VENDOR_DIR‘, ROOT_DIR.‘Vendor/‘);
        define(‘APP_DIR‘, ROOT_DIR.‘App/‘);
        define(‘PUBLIC_DIR‘, ROOT_DIR.‘Public/‘);
    }

设置错误控制:

    //设定错误控制
    private static function setSysError(){
        //两种级别:级别显示,是否显示
        @ini_set(‘error_reporting‘, E_ALL);
        @ini_set(‘display_errors‘, 1);
    }

解释URL($_REQUEST能够获取到所有传值的数据,因此当无法确定是POST还是GET时,用$_REQUEST):

    //解释URL
    private static function iniURL(){
        //获取三个数据:平台,控制器,方法
        $plat = isset($_REQUEST[‘p‘]) ? trim($_REQUEST[‘p‘]) : ‘Home‘;
        $module = isset($_REQUEST[‘c‘]) ? ucfirst(strtolower($_REQUEST[‘c‘])) : ‘Index‘;
        $action = isset($_REQUEST[‘a‘]) ? $_REQUEST[‘a‘] : ‘index‘;
        //这里用定义常量来保存在URL获取到的平台、控制器、方法,因为常量能够供全局使用。
        define(‘PLAT‘, $plat); //Admin或者Home
        define(‘CONTROLLER‘, $module);//指定控制器或者Index
        define(‘ACTION‘, $action);//指定方法或者index
    }

分发控制器,并调用方法:

    //分发控制器
    private static function iniDispatch(){
        //拿到对应的平台,控制器和方法
        $module = CONTROLLER . ‘Controller‘;
        $action = ACTION;

        //实例化对应的控制器,然后调用方法
        include_once APP_DIR.PLAT.‘/Controller/‘ . CONTROLLER . ‘Controller.class.php‘;
        //当前是Core空间,需要转到对应的控制器空间,空间命名规则:平台+对应属性。
        //new \Home\Controller\IndexController();
        $module = ‘\\‘ . PLAT . ‘\\Controller\\‘ . $module;//构建一个完全限定名称访问的路径

        $module = new $module;
        //var_dump($module);
        $module->$action();        //可变方法
    }

最后,在一开始的入口方法run()中调用上面所定义的方法,以达到当入口文件调用方法时,能够让App.class.php初始化相应的设置:

    public static function run(){
        self::setCharset();//设置字符集
        self::setDirConst();//定义目录常量
        self::setSysError();//设置错误控制
        self::iniURL();//解析URL
        self::iniDispatch();//分发控制器和调用方法
    }

 

当上述步骤完成后,即可在APP目录下的Home目录下的Controller中创建IndexController.class.php

 

PHP自定义框架部分知识点小结(一)

标签:控制   前台   roo   sys   end   系统   大量   传值   存在   

原文地址:http://www.cnblogs.com/xieyaojin/p/6209660.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!