自己动手写PHP MVC框架

本文介绍了如何从零开始创建一个简单的PHP MVC框架。通过设置项目目录结构,创建控制器、模型、视图文件,实现自动加载和路由分发,逐步构建一个基础的PHP框架。作者强调,这个教程提供了一种思路,适合初学者理解和实践MVC思想,以便后续逐步完善成自己的框架。
摘要由CSDN通过智能技术生成

PHP的框架众多,对于哪个框架最好,哪个框架最烂,是否应该用框架,对于这些争论在论坛里面都有人争论,这里不做评价, 个人觉得根据自己需求,选中最佳最适合自己MVC框架,并在开发中能够体现出敏捷开发的效果就OK了,作为一个PHPer要提高自己的对PHP和MVC的框架的认识,所以自己写一个MVC框架是很有必要的, 即使不是很完善,但是自己动手写一个轻量简洁的PHP MVC框架起码对MVC的思想有一定的了解,而且经过自己后期的完善会渐渐形成一个自己熟悉的一个PHP框架。

来写一个PHP MVC框架开发的简明教程,首先声明,教程里面的框架不是一个完善的框架,只是一种思路,当然每个人对MVC框架实现的方法肯定是有差异的,希望高手多提意见多指正,和我一样的菜鸟多讨论多交流,刚接触MVC的PHPer多学习。

首先,我们在项目中建立如下目录和文件:

app |-controller 存放控制器文件 |-model 存放模型文件 |-view 存放视图文件 |-lib 存放自定义类库 |-config 存放配置文件 |--config.php 系统配置文件 |-system 系统核心目录 |-index.php 入口文件

PHP进阶30K资料,免费获取:

【社群福利】30G-PHP进阶资料,助力大家都能30K

点击进人暗号:知乎

新件的index.php为入口文件,我们这里采用单一入口,入口文件的内容很简单:

<?php 
/** 
 * 应用入口文件 
 * @copyright   Copyright(c) 2011 
 * @author      yuansir <yuansir@live.cn/yuansir-web.com> 
 * @version     1.0 
 */ 
require dirname(__FILE__).'/system/app.php'; 
require dirname(__FILE__).'/config/config.php'; 
Application::run($CONFIG); 入口文件主要做了2件事,第一引入系统的驱动类,第二是引入配置文件,然后运行run()方法,传入配置作为参数,具体这2个文件是什么内容,我们接下来继续看。 先看一下config/config.php文件,里面其实是一个$CONFIG变量,这个变量存放的全局的配置: <?php 
/** 
 * 系统配置文件 
 * @copyright   Copyright(c) 2011 
 * @author      yuansir <yuansir@live.cn/yuansir-web.com> 
 * @version     1.0 
 */ /*数据库配置*/ 
$CONFIG['system']['db'] = array( 
    'db_host'           =>      'localhost', 
    'db_user'           =>      'root', 
    'db_password'       =>      '', 
    'db_database'       =>      'app', 
    'db_table_prefix'   =>      'app_', 
    'db_charset'        =>      'urf8', 
    'db_conn'           =>      '',             //数据库连接标识; pconn 为长久链接,默认为即时链接 

); /*自定义类库配置*/ 
$CONFIG['system']['lib'] = array( 
    'prefix'            =>      'my'   //自定义类库的文件前缀 
); $CONFIG['system']['route'] = array( 
    'default_controller'             =>      'home',  //系统默认控制器 
    'default_action'                 =>      'index',  //系统默认控制器 
    'url_type'                       =>      1          /*定义URL的形式 1 为普通模式    index.php?c=controller&a=action&id=2 
                                                         *              2 为PATHINFO   index.php/controller/action/id/2(暂时不实现)              
                                                         */                                                                           
); /*缓存配置*/ 
$CONFIG['system']['cache'] = array( 
    'cache_dir'                 =>      'cache', //缓存路径,相对于根目录 
    'cache_prefix'              =>      'cache_',//缓存文件名前缀 
    'cache_time'                =>      1800,    //缓存时间默认1800秒 
    'cache_mode'                =>      2,       //mode 1 为serialize ,model 2为保存为可执行文件    
); 

我这里有意识的定义$CONFIG['system']数组表示是系统的配置文件,当然你可以在里面定义$CONFIG['myconfig']为表示在定义的配置,以后在程序的控制器,模型,视图中来调用,都个很自由。 具体配置值代表什么意思注视很清楚了,下面的如果程序中有详细注释的我就不解释啦,呵呵

PHP最全的大厂面试题:

PHP面试题汇总,看完这些面试题助力你面试成功,工资必有20-25K

再来看一下system/app.php文件,主要是干嘛的:

<?php 
/** 
 * 应用驱动类 
 * @copyright   Copyright(c) 2011 
 * @author      yuansir <yuansir@live.cn/yuansir-web.com> 
 * @version     1.0 
 */ 
define('SYSTEM_PATH', dirname(__FILE__)); 
define('ROOT_PATH',  substr(SYSTEM_PATH, 0,-7)); 
define('SYS_LIB_PATH', SYSTEM_PATH.'/lib'); 
define('APP_LIB_PATH', ROOT_PATH.'/lib'); 
define('SYS_CORE_PATH', SYSTEM_PATH.'/core'); 
define('CONTROLLER_PATH', ROOT_PATH.'/controller'); 
define('MODEL_PATH', ROOT_PATH.'/model'); 
define('VIEW_PATH', ROOT_PATH.'/view'); 
define('LOG_PATH', ROOT_PATH.'/error/'); 
final class Application { 
        public static $_lib = null; 
        public static $_config = null; 
        public static function init() { 
                self::setAutoLibs(); 
                require SYS_CORE_PATH.'/model.php'; 
                require SYS_CORE_PATH.'/controller.php'; 

        } 
        /** 
         * 创建应用 
         * @access      public 
         * @param       array   $config 
         */ 
        public static function run($config){ 
                self::$_config = $config['system']; 
                self::init(); 
                self::autoload(); 
                self::$_lib['route']->setUrlType(self::$_config['route']['url_type']); 
                $url_array = self::$_lib['route']->getUrlAr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值