Ninvfeng Blog

记录web开发中的所见所得

01:从0开始写PHP框架系列之默认路由

前言

  • 【从0开始写PHP框架】这个系列是一个入门级的基础文章
  • 以能说明问题的最少代码量展示一个PHP框架中重要组成部分
  • 每一篇文章都对应一个可单独运行的php文件
  • 如果你是PHP初学者, 或想了解PHP框架实现原理是怎么样的, 这系列文章或许对你有所帮助。

场景

思路

  • 从$_SERVER['REQUEST_URI'],$_SERVER['SCRIPT_NAME']可拿到path_info信息: home/index 或user/profile
  • 然后将path_info转换成数组得到类和方法的名称
  • 接下来就是new类, 执行方法即可

具体代码

<?php
//截取path_info信息
$path=str_replace($_SERVER['SCRIPT_NAME'],'',$_SERVER['REQUEST_URI']);
$path=trim($path,'/');

//从路径中分离控制器方法
$path=explode('/',$path);
$action=array_pop($path);
$controller=ucfirst(array_pop($path));

//new控制器
$app=new $controller();

//执行方法
$app->$action();

//定义控制器和方法
class Home{
    public function index(){
        echo "this is index page";
    }
}

class User{
    public function profile(){
        echo "this is profile action";
    }
}

01.png
02.png

以上代码仅仅是最简单的实现,扩展思考:

  • 如何设置默认值,当没有path_info的时候自动调用Index类的index方法
  • 如何使用$_GET参数定义类和方法呢,因为有些情况下可能不支持path_info
  • 如何将控制器类放到单独文件夹下自动引入
  • 如何将不同模块的控制器放到不同目录下并建立与path_info的关联,比如 访问http://localhost/router.php/home/user/profile 调用controller/home/User.php的profile方法

文章评论已关闭!