浅解用PHP实现MVC

一个简单的PHP MVC留言本实例 标题上我把这个留言板叫最简单的,其实应该叫最简陋的,因为把全部注意力集中在MVC模式设计和实现上,所以UI方面几乎没有一点修饰。之所以在这里跟大家分享这个东西,是因为我自己通过读该老外的代码并仿照着写留言板对MVC的概念和具体实现有了些认识,希望了解MVC具体实现的朋友可以参考一下。 立即下载
传统的面相过程式的开发方式在处理中型以上的应用时,就开始显得力不从心。即便我们能够快速的完成需求,但是在需求发生变更后或者进行后期维护的时候,我们会深深地陷入我们早期搭建的陷阱中。所以,使用面向对象的方式来实现MVC模式,将为我们梳理程序的架构提供一个清晰的思路。

什么是MVC?

关于MVC的定义和解释,可以说多种多样。我们可以在Wiki或者[2]中找到更为详尽的解释,这里我并不打算,也没有能力进行深入的讲解,从PHP开发的角度来讲,MVC可以概括为:

视图(The View):

一说到视图,我们很多人都会想到模板引擎(诸如Smarty等等)。其实就是各种各样的输出,比如说html模板和Javascript文件等。

模块(The Model)

模块代表了程序的逻辑,在企业应用中通常称为业务逻辑层。一般来讲,这一层完成的工作是把原始的数据处理成按照我们设计的数据结构存储的有意义的数据序列,并将这些数据交给视图去处理。通常情况下, 模块中会利用一个数据抽象类来进行与数据操作有关的处理。
Model通常包含了哪些用来同数据库打交道的函数。

控制器(The Controller)

控制器使所有WEB应用的第一站,他接受收到的参数,比如$_GET变量,然后做出相应的反应。

关于MVC的是否适合PHP的争论也很多,人们不断的讨论MVC是否适合PHP[3],现在也已经有了很多的MVC框架,诸如PHP MVC Frameworks中列出的[4]。那么,为什么人们这么热衷于MVC,我们为什么要使用MVC在我们的设计中呢。

为什么用MVC?

MVC最早是用来解决桌面GUI的编程问题,最早的MVC框架应该是Sun在1999年提出的Model 2,后来演变成了Struts。MVC带给人们深刻的印象,但是我们在使用的过程中,却并没有认真的想过为什么使用MVC。
在传统的桌面应用中,一旦Model中有时间发生,我们可以主动的让View界面进行刷新,从而展示后台发生的变化。而在Web应用中,我们似乎限于传统的 Http的Request/Response的方式,我们似乎没有办法让用户端进行更新。这一段讨论,并不是认为MVC不能够用来进行WEB应用的开发,而是觉得从某种程度上来说,他还不是最合适的。
关于使用MVC的争论还有很多[1],但是相信所有习惯了使用MVC来组织自己的项目的人,让他选择一个新的项目构架时,一定不会放弃MVC。

如何实现MVC?

下面是一个超级简单的MVC结构实现,甚至连数据源都用了一个内置的固定数组,虽然简单,但其实众多的PHP Framework核心实现的思想应该和这个是差不多的,只不过一些framework提供了更多的方便开发者使用的工具,我也想自己来实现一个PHP的框架,目前正在着手策划中,也希望自己能够从框架的开发中学习到更多的PHP设计思想和方法。

Controller.php
  1. include 'Model.php';
  2. include 'View.php';

  3. class Controller {
  4.     private $model     = '';
  5.     private $view     = '';
  6.    
  7.     public function Controller(){
  8.         $this->model    =    new Model();
  9.         $this->view        =    new View();
  10.     }
  11.    
  12.     public function doAction( $method = 'defaultMethod', $params = array() ){
  13.         if( empty($method) ){
  14.             $this->defaultMethod();
  15.         }else if( method_exists($this, $method) ){
  16.             call_user_func(array($this, $method), $params);
  17.         }else{
  18.             $this->nonexisting_method();
  19.         }
  20.     }
  21.    
  22.     public function link_page($name = ''){
  23.         $links = $this->model->getLinks();
  24.         $this->view->display($links);
  25.         
  26.         $result = $this->model->getResult($name);
  27.         $this->view->display($result);
  28.     }
  29.    
  30.     public function defaultMethod(){
  31.         $this->br();
  32.         echo "This is the default method. ";
  33.     }
  34.    
  35.     public function nonexisting_method(){
  36.         $this->br();
  37.         echo "This is the noexisting method. ";
  38.     }
  39.    
  40.     public function br(){
  41.         echo "<br />";
  42.     }
  43. }


  44. $controller = new Controller();
  45. $controller->doAction('link_page', 'b');
  46. $controller->doAction();
复制代码
Model.php
  1. class Model {
  2.     private $database = array(
  3.         "a"    =>    "hello world",
  4.         "b"    =>    "ok well done",
  5.         "c"    =>    "good bye",
  6.     );
  7.    
  8.     //@TODO connect the database
  9.    
  10.     //run the query and get the result
  11.     public function getResult($name){
  12.         if( empty($name) ){
  13.             return FALSE;
  14.         }
  15.         
  16.         if( in_array($name, array_keys( $this->database ) ) ){
  17.             return $this->database[$name];
  18.         }
  19.     }

  20.     public function getLinks(){
  21.         $links = "<a href='#'>Link A</a>&nbsp;&nbsp;";
  22.         $links.= "<a href='#'>Link B</a>&nbsp;&nbsp;";
  23.         $links.= "<a href='#'>Link C</a>&nbsp;&nbsp;";
  24.         
  25.         return $links;
  26.     }
  27. }
复制代码
View.php
  1. class View {
  2.    
  3.     public function display($output){
  4. //        ob_start();
  5.         
  6.         echo $output;
  7.     }
  8.    
  9. }
复制代码

little-lite:不使用框架以MVC标准开发PHP网站的简单示例 小精简版MVC示例 一个不带框架的用PHP编写的MVC应用程序的简单示例。 编写代码总是很有趣的! 指示 该应用程序不使用数据库。 样本数据是从提供的样本json文件中检索的。 本示例中使用的布局模型已从站点删除。 使用的模型是“ 。 样本图像取自 。 如前所述,该示例非常简单,并且不使用单例,工厂或名称空间。 我正在设计一个迷你的最先进的框架。 我很高兴知道PHP的许多初学者都可以将此示例用作案例研究。 立即下载

相关推荐

PHP+MVC实现的留言板

PHP+MVC,带有分页,属于入门级示例

【php毕业设计】基于php+mysql+mvc的网上留言管理系统设计与实现(毕业论文+程序源码)——网上留言管理系统

大家好,今天给大家介绍基于php+mysql+mvc的网上留言管理系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。文章目录: 项目难度:中等难度 适用场景:相关题目的毕业设计 配套论文字数:12890个字23页 包含内容:整套源码+完整毕业论文提示:以下为毕业论文的简略介绍,项目源码及完整毕业论文下载地址见文末。1 引言 1.1 课题背景 随着互联网技术的迅猛发展,网络给人们带来了很多便利,我们在很多网站上都能看到各式各样的留言板,它是网站与访客之间进行交流的主要手段之一。一个设计合理,界面优

m0_66238867的博客 5034

php mvc留言板

php mvc 留言板的例子 使能够了解php mvc良好的开发模式

为什么大项目不用php,为什么大部份开源项目不用MVC框架开发

主流的PHP开源应用如:Discuz,WordPress,各种cms等,基本上都没有使用开源框架开发。除了历史原因以外,我有下面的一些疑问:1、如果使用框架开发是不是更加安全成熟稳定?2、有哪些因素导致这些开源项目不采用开源的MVC框架?3、使用开源MVC框架有哪些弊端?我们选择一个框架往往取决于该框架的开发目的,而不是开发模式。说起框架我立马就想起了java的ssh框架。好似成了java本身的一...

weixin_42360967的博客 543

基于mvc的留言板

基于mvc的留言板开发,包括增删查改,分页,基本数据库操作 1.请将文件名名为mvc1 2.执行sql语句 3.将解压的文件mvc1放在www目录下 4.搭建好php环境后直接输入 http://localhost/mvc1/index.php?c=add&m=msg_list 直接可以进行增删查改操作 ps:数据库名为bbs 表直接执行sql.txt文件的语句即可

TI AWR2944毫米波雷达开发板开箱:用官方Demo快速上手3D点云与热图生成

本文详细介绍了TI AWR2944毫米波雷达开发板的开箱与实战应用,包括硬件准备、软件开发环境搭建、Demo固件刷写与配置、实时可视化与数据解析等全流程指南。通过官方Demo快速上手3D点云与热图生成,帮助开发者高效掌握毫米波雷达技术在工业检测、智能交通等领域的应用。

weixin_42627853的博客 307

PHP移植项目,将非框架PHP项目移植到Laravel 4.x - php

我有一个很大的PHP项目,在其中我不使用任何框架(也不使用MVC模式),并且我希望在不停机的情况下将其逐步移植到Laravel上。我正在寻找使已经移植到Laravel的代码透明迁移的方法,同时保留了功能较旧的纯PHP代码。例如,Laravel使用类和方法(例如Input :: get())“覆盖”超全局变量($ _GET,$ _ POST等)。我简单的PHP项目当然直接使用了超级全局变量。如何在L...

weixin_28910825的博客 220

Transformer——从原理、模型架构到内部细节介绍

Transformer模型是一种基于注意力机制的深度学习模型,最早由Google在2017年的论文《AttentionIsAllYouNeed》中提出。自其问世以来就迅速席卷了自然语言处理他(NLP)领域,并在各类主流任务上取得了新的突破,包括机器翻译、语言建模、序列标注和文本分类等。在NLP领域取得巨大成功后,迅速扩展到了计算机视觉(CV)领域,并带来了革命性的变化。这种基于自注意力机制的深度学习模型,不仅在NLP任务中力压群雄,也成为CV领域的新宠。

小拉拉的博客 1万+

刚学的php分页笔记 未使用MVC分层模式

看了php的分页视频,限制条件查询数据库数据,在页面显示分页数据,浪费了一天精力,看一遍吃个饭又忘了,特此记录一下子核心内容! empList.php页面代码,显示查询数据库的数据并分页显示。

dengwenbiji的博客 537

【算法】基于STM32的MPU6050卡尔曼滤波算法(入门级)

1. 简介 卡尔曼滤波(Kalman filtering)是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。由于观测数据中包括系统中的噪声和干扰的影响,所以最优估计也可看作是滤波过程。详情见:卡尔曼滤波简介 MPU6050的解算主要有三种姿态融合算法:四元数法 、一阶互补算法和卡尔曼滤波算法。我们常用的DMP库使用的是四元数法,本文采用卡尔曼滤波算法,使用RT-Thread国产操作系统,利用env工具进行串口、模拟IIC环境配置,使用10ms的线程进行卡尔曼滤波解算。 2.

weixin_44549777的博客 3万+

RS422总线

①.RS422发送驱动器无高阻三态(浮空)状态RS422收发芯片,发送脚固定强驱动输出,永远钳位 A/B 差分电平,不能关断、不能悬空,只要芯片上电,TX+、TX - 就强制输出互补电压(一路高、一路低)。多条发送并联在同一组差分线上:两个驱动器一个拉 A 高、一个拉 A 低,B 线反向拉扯 → 电源→地大电流对灌,瞬间芯片过流发烫烧毁、总线电平短路错乱。注意:RS485 带DE/RE 收发使能脚:不用发送时可关闭驱动器,输出变成高阻浮空,让出总线,因此能多节点分时发送。③.多点通信方式,一主多从方式;

zhuimeng_1234的博客 222

php开发型,为什么说用PHP开发大型系统令人不爽

6. 混乱的许可证你也许认为PHP是免费的,所有的在手册中提到的PHP模块也是免费的。错了!例如,如果你想在PHP中生成PDF文件,你会在手册中发现两个模块:PDF 和 ClibPDF。但是这两个都是有商业许可证的。所以,你所使用的每个模块,你都要确保你同意他的许可证。7. 不一致的函数命名规则有些函数名称是有多个单词组成的。一般有三种单词组合的习惯:直接拼接:getnumberoffiles用下...

weixin_28857713的博客 297

工业数据采集实战:用open62541库读写PLC的OPC UA节点(避坑指南)

本文详细介绍了如何使用open62541库实现工业PLC的OPC UA节点数据采集,涵盖环境搭建、节点读写优化及生产环境故障排查。通过订阅模式和多节点读写技术,显著提升数据采集效率与稳定性,适用于智能制造和工业物联网场景。

weixin_30598225的博客 398

浅解用PHP实现MVC .

传统的面相过程式的开发方式在处理中型以上的应用时,就开始显得力不从心。即便我们能够快速的完成需求,但是在需求发生变更后或者进行后期维护的时候,我们会深深地陷入我们早期搭建的陷阱中。所以,使用面向对象的方式来实现MVC模式,将为我们梳理程序的架构提供一个清晰的思路。 什么是MVC? 关于MVC的定义和解释,可以说多种多样。我们可以在Wiki或者[2]中找到更为详尽的解释,这里我并不打算,

养有道 445

【Codex Sandbox 与审批机制:小白也能看懂的实用教程】

这篇教程介绍了Codex工具中的沙盒(Sandbox)和审批(Approvals)机制,帮助用户安全高效地使用Codex协作。沙盒限制Codex访问范围,审批机制则控制敏感操作权限。文章详细讲解了五种常见模式:最安全的安全只读浏览、只读非交互、仓库内编辑、Auto预设和不推荐的YOLO模式。还提供了新手使用路径建议、配置示例和实战场景范式,包括如何测试沙盒行为、不同系统下的实现方式以及常见问题解答。最后附上速查清单,帮助用户快速选择合适的权限组合。

zsr154278963的博客 6702

CANbus收发器ADM3053BRWZ-REEL7应用原理图设计

ADM3053 在 CAN 协议控制器与物理层总线之间创建一个 完全隔离的接口。该器件具有限流和热关断特性,可防止输出短路。额定温 度范围为工业温度范围,提供 20 引脚、宽体 SOIC 封装。该器件采用 5 V 单电源供电, 提供完全隔离的 CAN 解决方案。ADM3053 是一款隔离式控制器区域网络 (CAN) 物理层收 发器,集成隔离 DC/DC 转换器,符合 ISO 11898 标准。该器件采用 ADI 公司的。Coupler® 技术,将双通道隔离器、 CAN 收发器和 ADI 公司的。

zhusl6688的博客 1235

php输出静态,输出php静态

静态化静态化1、先来看几个问题?a当我们访问程序的时候,每刷新一次页面我们的PHP代码都需要解析一次。b每刷新一次页面我们的PHP代码,操作数据库就要重复一次c但是我们要查询的数据没有变化,重复的操作给我们的服务器带来了资源的浪费(重复解析和查询)d要想不浪费有限的服务器资源,提高服务器性能...文章技术小胖子2017-11-09886浏览量php之MVC简单介绍Model:业务逻辑层,处理数据...

weixin_33933280的博客 334

linux v3h平台开发系列详解(GMSL摄像头篇):1.11 解串器MIPI 1.5G高速率特殊deskew配置

解串器max96712 deskew配置

xian18809311584的博客 1774

一言不合就学习:PHP优秀学习文章资料汇总整理

最近,一直在收集,整理一些针对包括程序员、运营、设计师等在内的系统学习资料,希望给初学者一些参考,也给已经入门的人一些进阶建议,让知识体系 更加系统化。当然,这个工作不可能一蹴而就,也相当不能完善,每天都有新技能、新技术产生,并发生变化,但也希望能对大家有些微帮助。 作为一门吸收了C语言、Java和Perl特点的开源脚本语言,PHP受到了众多Web开发者的喜爱,在TIOBE 2016年7月编

Alvin博客 763

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

PHP优秀学习文章资料汇总整理

作为一门吸收了C语言、Java和Perl特点的开源脚本语言,PHP受到了众多Web开发者的喜爱,在TIOBE 2016年7月编程语言排行榜中,PHP位列第七名。 这里,小编整理了PHP相关的优秀文章资料资源,为广大PHP开发者提供学习参考,初学者也可以借鉴

钟长森的博客 511

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

上一篇: centos 5.3 安装vsftpd用本地用户登陆
下一篇: 什么是MVC以及PHP如何实现MVC
ahstudy
博客等级 码龄19年 60粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值