广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >如何用PHP实现简易的MVC框架
  • 735
分享到

如何用PHP实现简易的MVC框架

2023-06-30 13:06:41 735人浏览 八月长安
摘要

这篇文章主要介绍了如何用PHP实现简易的mvc框架的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何用php实现简易的MVC框架文章都会有所收获,下面我们一起来看看吧。一、前言MVC的全名是Model View

这篇文章主要介绍了如何用PHP实现简易的mvc框架的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何用php实现简易的MVC框架文章都会有所收获,下面我们一起来看看吧。

如何用PHP实现简易的MVC框架

一、前言

MVC的全名是Model View Controller,是一种使用模型-视图-控制器设计和创建WEB应用程序的模式,是一种设计典范。

其中:

  • Model(模型):是应用程序中用于处理应用程序数据逻辑的部分,通常负责与数据库直接进行 curd 的交互。

  • View(视图):是应用程序处理数据显示的部分,通过将处理好的数据进行渲染。

  • Controller(控制器):是应用程序中处理用户交互的部分,通常用于处理数据逻辑的分发,并相应的反送给视图和控制器。

优点:

  • 低耦合

  • 重用性高

  • 部署快,生命周期成本低

  • 可维护性高

缺点:

  • 增加了系统结构和实现的复杂性

  • 视图与控制器间的过于紧密的连接

二、哪些框架使用到了mvc架构

目前现在php主流的框架都已经用到了mvc架构,例如:

thinkPHPLaravelYii 都有mvc的架构。

三、框架结构简介

如何用PHP实现简易的MVC框架
其中:

  • app目录:用来存放视图控制器模型等。

  • config目录:用来存放框架的一些公共配置文件。

  • core目录:用来存放一些基类文件,例如:控制器基类、模型基类、视图基类、request请求基类、db链式操作基类等。

  • static目录:用来存放一些静态资源,例如:图片、html视图文件、js、cs文件等。

  • index.php:整个框架的入口文件,进行分发启动。

四、框架实现第一步(解析路由)

解析路由为什么是第一步呢?

只有成功解析路由以后,访问到了某个类中的某个方法才可以使用MVC,因为解析路由也是框架实现的最基础的一部分,解析路由也少不了PHP的自动加载机制

目前的php的自动加载机制可以分为两大机制,composer自动加载机制和手动实现自动加载机制,该简易框架通过手动实现自动机制来完成。

4.1 写入口文件

index.php

<?php//定义应用目录const APP_PATH = __DIR__ . '/';//加载框架核心文件require(APP_PATH . 'core/Core.php');//实例化框架类并运行(new core\Core())->run();

代码详解:

第一步,定义了常量用来定义应用目录,后期可能会在某个地方就会用到。
第二步,加载框架核心文件 Core.php ,主要的核心逻辑也都集中在这个文件中。
第三步,实例化该类,并调用该类的run方法。

4.2 定义Core核心类

Core.php

<?phpnamespace core;class Core{    public function run()    {        spl_autoload_reGISter(array($this, 'loadClass'));        $this->route();    }    public function route()    {        $url = $_SERVER['REQUEST_URI'];        $position = strpos($url, '?');        $url = $position === false ? $url : substr($url, 0, $position);        $url = trim($url, '/');        if ($url)        {            //走URL指定控制器            $urlArray = explode('/', $url);            $controllerName = ucfirst($urlArray[count($urlArray)-2]);            $actionName = $urlArray[1];        }else{            //走默认控制器            $controllerName = 'Index';            $actionName = 'index';        }        $versionUrlArr = explode('/',$url);        $versionUrlArr = array_slice($versionUrlArr,0,-2);        $versionStr = implode('\\',$versionUrlArr);        if (empty($versionStr)){            $versionStr = $versionStr;        }else{            $versionStr = $versionStr.'\\';        }        $controller = 'app\\controllers\\'.$versionStr. $controllerName . 'Controller';        if (!class_exists($controller)) {            exit($controller . '控制器不存在');        }        if (!method_exists($controller, $actionName)) {            exit($actionName . '方法不存在');        }        $dispatch = new $controller($controllerName, $actionName);        $dispatch->$actionName();    }        public function loadClass($className)    {        $className = str_replace('\\','/', $className);        $file = $className . '.php';        if (file_exists($file)){            require_once $file;        }    }}

首先调用的是该类的 run 方法,run 方法主要负责调用运行框架所需要 的一些方法,首先注册了自动加载方法 loadClass,其后调用了的解析路由的方法(这儿是重点,这儿实现了地址栏上输入接口地址直接访问控制器)。

注意:路由的解析规则是由我们自己来进行定义的。

代码详解:

注册自动加载类,目的是为了路由解析、命名空间所使用。
第二步:调用路由解析方法,把地址栏上输入的 域名/控制器名/方法名 给解析出来,并进行调用。

经过一系列解析后,最终 new 类名,调用方法名,来实现了路由的成功解析,从而访问了某个类下面的某个方法。

$dispatch = new $controller($controllerName, $actionName);$dispatch->$actionName();

例如,要访问app\controllers\StudentController.php文件下的 demo 方法:

<?phpnamespace app\controllers;use core\base\Controller;class StudentController extends Controller{    public function demo()    {        echo '写代码的光头强';    }}

如何用PHP实现简易的MVC框架

五、框架实现第二步(MVC的实现)

通过第一步已经完成了地址栏输入路径访问到某个控制器中了,下面就需要在控制器中进行 MVC 操作了。

5.1 控制器的实现

控制器本身是已经实现的,但是我们需要去继承一个控制器基类在里面实现一些操作,例如:注册一些全局异常类、注册一些请求类、控制器之间的互相调用等。

5.2 视图的实现

视图基类文件写到了 core/base/View.php 文件里:

<?phpnamespace core\base;class View{    protected $variables = array();    protected $_controller;    protected $_action;    function __construct($controller, $action)    {        $this->_controller = strtolower($controller);        $this->_action = strtolower($action);    }    public function assign($name, $value)    {        $this->variables[$name] = $value;    }    public function render()    {        try {            extract($this->variables);            $file = APP_PATH . 'app/views/' . $this->_controller . '/' . $this->_action . '.php';            if (file_exists($file)){                require_once $file;            }else{                require_once APP_PATH.'core/errorpage/404.html';            }        }catch (\Exception $e){            echo $e->getMessage();        }    }}

代码详解:

其中,视图功能有两大功能。

第一大功能:传值(assign)

我们一般传值都是通过

$this->assign('name','写代码的光头强');$this->assign('sex','男');

这种方法进行传值。

在框架中实现的方法为:

public function assign($name, $value){   $this->variables[$name] = $value;}

很明显的可以看出,将所有的键值对放到了一个数组中。

第二大功能:视图映射(render)

实现代码:

public function render(){   extract($this->variables);   $file = APP_PATH . 'app/views/' . $this->_controller . '/' . $this->_action . '.php';   if (file_exists($file)){       require_once $file;   }else{       require_once APP_PATH.'core/errorpage/404.html';   }}

接收到控制器名方法名,拼接到自定义视图解析规则地址上,直接引入即可。

5.3 模型的实现

实现模型的灵魂就是要控制器名作为表名来使用。

控制器中:

$data = ['name' => 'tom'];$model = new StudentModel();$model->aDDData($data);

自定义的模型中:

<?phpnamespace app\models;use core\base\Model;class StudentModel extends Model{    protected $table = 'student';    public function addData($data)    {        $this->add($data);    }}

模型基类:

<?phpnamespace core\base;use core\db\ORM;class Model extends Orm{    protected $table;    public function __construct()    {        echo $this->table;    }    public function add($data){        //处理添加逻辑    }}

在模型基类中我们可以自定义orm来完成与数据库的交互操作

关于“如何用PHP实现简易的MVC框架”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“如何用PHP实现简易的MVC框架”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网PHP编程频道。

--结束END--

本文标题: 如何用PHP实现简易的MVC框架

本文链接: https://www.lsjlt.com/news/329345.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何用PHP实现简易的MVC框架
    这篇文章主要介绍了如何用PHP实现简易的MVC框架的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何用PHP实现简易的MVC框架文章都会有所收获,下面我们一起来看看吧。一、前言MVC的全名是Model View...
    99+
    2023-06-30
  • 使用Node.js实现简易MVC框架的方法
    在使用Node.js搭建静态资源服务器一文中我们完成了服务器对静态资源请求的处理,但并未涉及动态请求,目前还无法根据客户端发出的不同请求而返回个性化的内容。单靠静态资源岂能撑得起这些复杂的网站应用,本文将介...
    99+
    2022-06-04
    简易 框架 方法
  • vue如何实现简易的弹出框
    目录vue实现弹出框1.Template2.script => data 中定义3.script => methods 中定义关闭方法4.样式vue实现弹窗选择1.创建一...
    99+
    2022-11-13
  • 基于JavaSSM框架实现简易的评教系统
    目录介绍效果图部分核心代码介绍 项目编号:BS-GX-014 数据库:mysql 开发工具:IDEA / ECLIPSE 开发技术:SSM 框架 本系统基于SSM框架实现。主要包含三...
    99+
    2022-11-13
  • React框架快速实现简易的Markdown编辑器
    目录前言需要实现的功能具体实现一、布局二、markdown语法解析三、markdown主题样式四、代码块高亮五、同步滚动bug1:bug2:六、工具栏七、补充八、最后前言 最近我在项...
    99+
    2022-11-13
  • Netty实现简易版的RPC框架过程详解
    目录正文1:如何运行项目2:从客户端调用开始(springboot-zk-study项目)3:服务端处理请求4:接下来要做什么正文 项目地址:gitee.com/baojh123...
    99+
    2023-02-10
    Netty简易版RPC框架 Netty RPC
  • 使用gin框架搭建简易服务的实现方法
    go语言web框架挺多的,各有各的特点和风格。我之所以在项目中使用gin框架,是因为项目一开始是用的martini,一个设计得很好的框架,但是存在一个比较严重的问题,就是大量使用反射...
    99+
    2022-11-12
  • 如何用代码实现JavaScript MVC样式框架
    这篇文章将为大家详细讲解有关如何用代码实现JavaScript MVC样式框架,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Download JavaScr...
    99+
    2022-10-19
  • Java应用开源框架实现简易web搜索引擎
    引言应用 Java 的开源库,编写一个搜索引擎,这个引擎能爬取一个网站的内容。并根据网页内容进行深度爬取,获取所有相关的网页地址和内容,用户可以通过关键词,搜索所有相关的网址。具体功能(1) 用户可以指定爬取一个url对应的网页的内容。 (...
    99+
    2023-05-30
    java web 搜索
  • express框架实现基于Websocket建立的简易聊天室
    最近想写点有意思的,所以整了个这个简单的不太美观的小玩意 首先你得确认你的电脑装了node,然后就可以按照步骤 搞事情了~~ 1.建立一个文件夹 2.清空当前文件夹地址栏,在文件夹地址栏中输入cmd.ex...
    99+
    2022-06-04
    简易 框架 聊天室
  • php如何实现简易留言板
    小编给大家分享一下php如何实现简易留言板,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!php实现简易留言板的方法:1、在数据库中创建两张表;2、编写send页面...
    99+
    2023-06-22
  • Golang如何实现简易的rpc调用
    这篇文章主要介绍“Golang如何实现简易的rpc调用”,在日常操作中,相信很多人在Golang如何实现简易的rpc调用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Golang如何实现简易的rpc调用”的疑...
    99+
    2023-07-05
  • 使用Python实现简单的爬虫框架
    目录一、请求网页二、解析 HTML三、构建爬虫框架爬虫是一种自动获取网页内容的程序,它可以帮助我们从网络上快速收集大量信息。在本文中,我们将学习如何使用 Python 编写一个简单的...
    99+
    2023-05-19
    Python如何实现爬虫框架 Python爬虫框架 Python爬虫
  • 如何实现一个简易的NpmInstall
    本篇文章给大家分享的是有关如何实现一个简易的NpmInstall ,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。现在写代码我们一般不会全部自己...
    99+
    2022-10-19
  • 如何用python实现简易聊天室
    本篇内容主要讲解“如何用python实现简易聊天室”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何用python实现简易聊天室”吧!1.功能:类似qq群聊功能有人进入聊天室需要输入姓名,姓名不...
    99+
    2023-06-20
  • python实现一个简单的web应用框架
    目录引言写应用框架需要写底层服务器么uwsgi基本使用安装uwsgi配置uwsgiuwsgi常用配置uwsgi启服和停服启动一个demo写一个简单的web应用框架总结引言 本篇文章所...
    99+
    2023-05-18
    python web应用框架 python web
  • C#如何实现简易的计算器
    这篇文章主要介绍了C#如何实现简易的计算器,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。C#实现简易的计算器的具体内容如下1 题目描述(1)Form1窗体设计界面如下:(2)...
    99+
    2023-06-14
  • PHP实现的拖拽图形验证,简单易用!
    最近看到一些拖拽验证码的帖子,本着好奇和研究学习的态度简单实现了第一版的 拖拽验证项目地址:github.com/RLOFLS/drag-captcha示例逻辑:apiphp Draggenerate() 生成渲染数据 dst, front...
    99+
    2022-08-08
    验证码 php
  • android studio如何实现简易的计算器
    本篇内容主要讲解“android studio如何实现简易的计算器”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“android studio如何实现简易的计算器”吧!先看效果...
    99+
    2023-06-30
  • 如何使用HttpClient和HtmlParser实现简易爬虫
    这篇文章给大家分享的是有关如何使用HttpClient和HtmlParser实现简易爬虫的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。   HttpClient 简介   H...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作