MVC模式的PHP实现(2)

掌握UT框架2.0:高效PHP应用开发 在软件工程中,依赖注入用于实现控制反转,从而促进松耦合。它允许类将自己的依赖项定义为接口或抽象类,而这些依赖项由外部提供。依赖注入的优势包括:解耦:依赖注入使得应用程序中的各个组件之间解耦,从而降低了它们之间的依赖关系。易于测试:依赖项可以通过模拟对象(mock object)来替代,使得单元测试更加容易。代码清晰和模块化:依赖注入使得代码更加清晰,易于理解和维护。错误处理与日志的管理策略应根据应用程序的具体需求定制。 阅读详情

例子

 

这里是一个使用MVC模式的简单例子。

首先我们需要一个数据库访问类,它是一个普通类。

 

<?php
/**
*  A simple class for querying MySQL
*/
class DataAccess {
    
/**
    * Private
    * $db stores a database resource
    */
    
var $db;
    
/**
    * Private
    * $query stores a query resource
    */
    
var $query; // Query resource

    //! A constructor.
    /**
    * Constucts a new DataAccess object
    * @param $host string hostname for dbserver
    * @param $user string dbserver user
    * @param $pass string dbserver user password
    * @param $db string database name
    */
    
function DataAccess ($host,$user,$pass,$db) {
        
$this->db=mysql_pconnect($host,$user,$pass);
        
mysql_select_db($db,$this->db);
    }

    
//! An accessor
    /**
    * Fetches a query resources and stores it in a local member
    * @param $sql string the database query to run
    * @return void
    */
    
function fetch($sql) {
        
$this->query=mysql_unbuffered_query($sql,$this->db); // Perform query here
    
}

    
//! An accessor
    /**
    * Returns an associative array of a query row
    * @return mixed
    */
    
function getRow () {
        if ( 
$row=mysql_fetch_array($this->query,MYSQL_ASSOC) )
            return 
$row;
        else
            return 
false;
    }
}
?>

 

在它上边放上模型。

 

<?php
/**
*  Fetches "products" from the database
*/
class ProductModel {
    
/**
    * Private
    * $dao an instance of the DataAccess class
    */
    
var $dao;

    
//! A constructor.
    /**
    * Constucts a new ProductModel object
    * @param $dbobject an instance of the DataAccess class
    */
    
function ProductModel (&$dao) {
        
$this->dao=& $dao;
    }

    
//! A manipulator
    /**
    * Tells the $dboject to store this query as a resource
    * @param $start the row to start from
    * @param $rows the number of rows to fetch
    * @return void
    */
    
function listProducts($start=1,$rows=50) {
        
$this->dao->fetch("SELECT * FROM products LIMIT ".$start.", ".$rows);
    }

    
//! A manipulator
    /**
    * Tells the $dboject to store this query as a resource
    * @param $id a primary key for a row
    * @return void
    */
    
function listProduct($id) {
        
$this->dao->fetch("SELECT * FROM products WHERE PRODUCTID='".$id."'");
    }

    
//! A manipulator
    /**
    * Fetches a product as an associative array from the $dbobject
    * @return mixed
    */
    
function getProduct() {
        if ( 
$product=$this->dao->getRow() )
            return 
$product;
        else
            return 
false;
    }
}
?>

 

有一点要注意的是,在模型和数据访问类之间,它们的交互从不会多于一行——没有多行被传送,那样会很快使程式慢下来。同样的程式对于使用模式的类,它只需要在内存中保留一行(Row)——其他的交给已保存的查询资源(query resource)——换句话说,我们让MYSQL替我们保持结果。

接下来是视图——我去掉了HTML以节省空间,你可以查看这篇文章的完整代码。

 

<?php
/**
*  Binds product data to HTML rendering
*/
class ProductView {
    
/**
    * Private
    * $model an instance of the ProductModel class
    */
    
var $model;

    
/**
    * Private
    * $output rendered HTML is stored here for display
    */
    
var $output;

    
//! A constructor.
    /**
    * Constucts a new ProductView object
    * @param $model an instance of the ProductModel class
    */
    
function ProductView (&$model) {
        
$this->model=& $model;
    }

    
//! A manipulator
    /**
    * Builds the top of an HTML page
    * @return void
    */
    
function header () {

    }

    
//! A manipulator
    /**
    * Builds the bottom of an HTML page
    * @return void
    */
    
function footer () {

    }

    
//! A manipulator
    /**
    * Displays a single product
    * @return void
    */
    
function productItem($id=1) {
        
$this->model->listProduct($id);
        while ( 
$product=$this->model->getProduct() ) {
             
// Bind data to HTML
        
}
    }

    
//! A manipulator
    /**
    * Builds a product table
    * @return void
    */
    
function productTable($rownum=1) {
        
$rowsperpage='20';
        
$this->model->listProducts($rownum,$rowsperpage);
        while ( 
$product=$this->model->getProduct() ) {
             
// Bind data to HTML
        
}
    }

    
//! An accessor
    /**
    * Returns the rendered HTML
    * @return string
    */
    
function display () {
        return 
$this->output;
    }
}
?>

 

PS:本来是一个帖子的;可是死活贴不上来 -________-b 只好腰斩了

Part1 http://www.youkuaiyun.com/Develop/read_article.asp?id=21639

Part2 http://www.youkuaiyun.com/Develop/read_article.asp?id=21640

Part3 http://www.youkuaiyun.com/Develop/read_article.asp?id=21641

 

PHP电商系统开发实战:UQ云商B2B2C平台 本文还有配套的精品资源,点击获取 简介:这是一个基于PHP的B2B2C电商系统源码包,专门设计来支持多商户运营模式,涵盖了前后端代码、数据库结构、用户和商户管理、订单处理、支付接口、商品分类展示、购物车、配送和售后服务等核心电商模块。本实例源码深入讲解了如何使用PHP进行MVC架构设计,处理HTTP请求,数据库交互和用户认证授权等电商开发关键环节。开发者可以通过分析和实践这... 阅读详情

相关推荐

游戏资源解包神器NSCB实战:手把手教你提取Switch游戏视频(nsm转MP4)

本文详细介绍了如何使用NSCB工具链从Switch游戏中提取nsm视频和hca音频资源,并将其转换为可编辑的MP4和MP3格式。通过NSC Builder、CriPakTools等工具的分步操作指南,帮助内容创作者高效获取游戏资源,同时提供音视频同步合成、批量处理等高级技巧,为创意素材制作提供完整解决方案。

weixin_29197835的博客 888

PHP MVC模式讲解及实例

一、MVC模式流程图 二、MVC概念 (1)作用 MVC包括控制器(Controller),模型(Model),视图(View)。 控制器的作用是调用模型和 视图,将模型产生的数据传递给视图,并让视图去显示 模型的作用是获取数据并处理返回数据 ...

YICONGITSME的博客 1万+

使用Gromacs进行蛋白和配体小分子的动力学模拟+结果分析全流程教程

先选protein,选择non-water,使用pymol打开delWater.pdb,输入util.ss('all')展示cartoon,点击file-Export Moive as-MPEG。这一步完成后,文件夹中会出现以下三个文件,其中gro 文件用于记录蛋白的初始坐标,top 文件记录蛋白的拓扑信息和力场信息,itp 与top文件类似。接下来使用Spdbv软件打开蛋白,如果蛋白中存在原子缺失情况,就会出现以下的提示,如果不存在就不会显示,同时保存为rep.pdb。

weixin_46587777的博客 2853

PHP:MVC迷思

 近来设计模式风行,MVC随处可见,PHP领域也不例外,很多论坛都开始讨论在PHP中使用MVC。然而,M、V、C在PHP中到底该如何实现?MVC真的适合PHP么?这里Easy给出一些自己的思考。MVC的原型MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器。使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批

.: Easy Style - 将PHP进行到底 :. 1895

ServiceNow Discovery & CMDB Interview Questions and Answers (2025)

【代码】ServiceNow Discovery & CMDB Interview Questions and Answers (2025)

weixin_47584092的博客 910

基于Python的车牌识别系统实现

本文将以基于Python的车牌识别系统实现为方向,介绍车牌识别技术的基本原理、常用算法和方法,并详细讲解如何利用Python语言实现一个完整的车牌识别系统。

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 5万+

MVC详解

MVC与模板概念的理解  MVC(Model View Controller)模型-视图-控制器   MVC本来是存在于Deskt op程序中的,M是指数据模型,V是指用户界面,C则是控制器。使用MVC 的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据你可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新...

261

智能车图像处理2-入门级分析1 ---基础扫线

PS :入门级文章适合新手,如果已经有基础可以去看进阶篇文章。

taiyuezyh的博客 7747

php in MVC from phpmvc .net

php.MVC is an open source framework for PHP Web applications. Introduction php.MVC implements the Model-View-Controller (MVC) design pattern, and encourages application design based on the

924

Python 爬虫实战:付费 IP 代理使用技巧与爬虫稳定性优化

付费IP代理实战指南:突破反爬与优化稳定性 本文系统讲解付费IP代理在爬虫项目中的高效应用方法。首先对比分析静态代理、动态代理和隧道代理的优缺点及适用场景,推荐高并发项目优先选择隧道代理。然后详细演示了主流代理服务商的集成方法,包括代理池的自动更新和健康检测机制。核心部分重点介绍了爬虫稳定性优化策略,如智能重试、频率控制和请求间隔优化等关键技术。最后通过压力测试验证优化效果,并提供成本控制方案,包括代理复用、错峰爬取等实用技巧。通过本教程,开发者可有效解决高并发爬虫中的IP封禁问题,显著提升系统稳定性和抗风

2503_91057718的博客 2450

【ARMv8 异常模型入门及渐进7 - GIC及安全中断介绍】

GIC-v3中,引入了支持2种安全状态(secure state),也就是对于中断,根据secure状态,分为安全中断和非安全中断。当然也可以只支持一种安全状态。这里的2种安全状态和1种安全状态,主要是影响中断分组,所使用IRQ和FIQ管脚的映射,以及gic中的寄存器访问。

CodingCos的博客 2116

MVC简介

MVC简介         MVC是三个单词的缩写,分别为: 模型(Model),视图(View)和控制Controller)。 MVC模式的目的就是实现Web系统的职能分工。 Model层实现系统中的业务逻辑,通常可以用JavaBean或EJB来实现。 View层用于与用户的交互,通常用JSP来实现。 Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。目录MVC与模板概念的理解MVC如何工

黑暗料理 1476

AI智能体在化学中的伦理问题:7个案例,架构师如何应对?

AI在化学中的应用早已不是新鲜事:药物发现中用AI预测分子活性(比如AlphaFold预测蛋白质结构)、化工生产中用AI优化合成路线(降低成本30%+)、材料研发中用AI设计新型电池材料(缩短研发周期5年)……但随着AI从“辅助工具”升级为“自主决策智能体”(比如能自动调整反应条件的“化学机器人”),伦理风险开始从“潜在隐患”变成“真实事故”。AI在化学中会踩哪些伦理“坑”?(用案例具象化)这些“坑”的底层逻辑是什么?(从技术到价值观的链条)架构师能做什么?

AI 算法实战派 1362

说说MVC

MVC是三个单词的缩写,分别为: 模型(Model),视图(View) 和控制Controller)。 MVC模式的目的就是实现Web系统的职能分工。 Model层实现系统中的业务逻辑,通常可以用JavaBean或EJB来实现。 View层用于与用户的交互,通常用JSP来实现。 Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也...

weixin_30390075的博客 165

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

设计模式 - MVC 扩展设计

设计模式、MVC、

聆听岁月的博客 342

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

PHP打印物流信息面试题,php程序员面试题收集汇总大全

1、写出五种以上你使用过的PHP的扩展的名称(提示:常用的PHP扩展)mysql、gd2、pdo、curl、mbstring、soap等,在php.ini中可以找到。尽量多了解一些扩展,了解他们的功能(能做什么)。2、了解MVC模式吗?请写出三种以上目前PHP流行的MVC框架名称(不区分大小写)MVC是Model(模型)、View(视觉)、Controll(控制器)的缩写。MVC(Model-Vi...

weixin_31136061的博客 149

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

基于安卓的php图片分享系统,【全套设计下载】基于PHP实现的WEB图片共享系统(源代码+论文)...

【全套设计下载】基于PHP实现的WEB图片共享系统(源代码+论文) 基于PHP实现的WEB图片共享系统摘 要本系统主要从现代社会电脑化观念出发,通过对现有资料的分析、研究和整理,确定了在基于现存的WEB2.0模式下开发图片共享系统的可行性、紧迫性和必要性。在现阶段,国内基于WEB2.0的图片共享系统才刚起步,该市场还有很大的介入空间。其中,在国外,已经有了很成熟的图片共享平台。在WEB2.0时代,...

weixin_31509753的博客 129

mvc传递数据 php,php – 一般在mvc …应该控制器传递数据来查看或查看应该直接从模型?...

我正在尝试学习并充分了解mvc模式,同时学习php.我决定建立基本的mvc框架,以后我可以在各种项目中使用.阅读了很多关于mvc和模型/视图/控制器之间的联系的帖子我有点迷失了.目前我的理解是,在Web应用程序控制器处理来自浏览器的请求,如果需要,调用方法模型类告诉模型来改变其状态.然后控制器实例化将负责显示界面的适当视图类.这是我不明白的一点>现在应该通过适当的模型对象来查看和查看应该在需...

weixin_26757949的博客 158

简述MVC思想与PHP如何实现MVC

什么是MVC? 简单的说就是将网站源码分类、分层。 MVC三个字母的含义: M:Model 模型,负责数据库操作。 V:View 视图,负责调用Model调取数据,再调用模板,展示出最终效果。 C:Controller 控制器,程序的入口,决定改调用哪个View,并告诉View该做什么。 如此说来,程序的执行顺序是C-V-M 或 C-M ,和MVC的名字正好相反。 为什么要MVC?

343

简述MVC思想 与PHP如何实现MVC

什么是MVC?  简单的说就是将网站源码分类、分层。  MVC三个字母的含义:  M:Model 模型,负责数据库操作。  V:View 视图,负责调用Model调取数据,再调用模板,展示出最终效果。  C:Controller 控制器,程序的入口,决定改调用哪个View,并告诉View该做什么。  如此说来,程序的执行顺序是C-V-M 或 C-M ,和MVC的名字正好相反。  为什么要MVC? ...

weixin_34234823的博客 143

PHP实现简易的MVC框架

实现MVC框架没有固定的实现方法,根据框架特色和语言特点以及自己的需求进行实现即可。

光头强的博客 7139

PHP中的MVC设计模式是如何实现的?

通过以上方法,PHP中的MVC设计模式能够有效地分离应用程序的各个部分,使代码更加模块化和易于维护。无论是使用现成的框架还是手动构建MVC结构,关键在于明确每个部分的职责并确保它们之间的良好协作。

破损的天堂鸟博客 1558

php之mvc设计模式的原理和实现

一、MVC设计模式概述 1.什么是MVC设计模式 2. MVC设计模式的优势和缺点 二、 MVC典型实现 1.模型    数据库操作类    模型类 2.控制器    模块    控制器类 3.视图 4.前端控制器(入口文件) 一、MVC设计模式概述 1.什么是MVC设计模式 MVC是Xerox PRAC(施乐帕克研究中心)在80年代为编程语言 Smalltalk-80发明的一种软件设计模式,...

咖啡味的小认真 2351

MVC模式的php实现方式 实例

MVC模式在网站架构中十分常见。它允许我们建立一个三层结构的应用程式,从代码中分离出有用的层,帮助设计师和开发者协同工作以及提高我们维护和扩展既有程式的能力。 视图(View) “视图”主要指我们送到Web浏览器的最终结果——比如我们的脚本生成的HTML。当说到视图时,很多人想到的是模版,但是把模板方案叫做视图的正确性是值得怀疑的。 对视图来说,最重要的事情可能是它应该是“自我意

瞧字不识 2020
上一篇: MVC模式的PHP实现(1)
下一篇: MVC模式的PHP实现(3)
KBUG
博客等级 码龄24年 5粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值