首页 php教程 php手册 打造属于自己的MVC框架

打造属于自己的MVC框架

Jun 06, 2016 pm 08:11 PM
mvc 属于 打造 框架 自己的

本文为转载。 最近正打算培训一下新人做PHP开发,突然想起了这篇关于php的MVC入门教程。当初我入门的时候也是参照它来看。觉得它还是比较通俗易懂,于是就转过来,给需要的人也看看 ————————————————分割线————————————————

本文为转载。

最近正打算培训一下新人做PHP开发,突然想起了这篇关于php的MVC入门教程。当初我入门的时候也是参照它来看。觉得它还是比较通俗易懂,于是就转过来,给需要的人也看看

————————————————分割线————————————————

本篇先介绍一下php的MVC实现原理,我们框架的MVC部分也是基于此原理实现的,但是今天的代码并不是框架内的代码,仅仅为说明原理。

一、文件结构


?? ?建立3个文件夹

?? ?controller文件夹存放控制器文件

?? ?view文件夹存放视图文件

?? ?model文件夹存放数据文件

?? ?建立1个index.php 作为唯一入口

二、控制器


?? ?我们在controller文件夹下建立一个democontroller.php文件,文件内容如下

<?php class DemoController
{
function index()
{
echo('hello world');
}
}
/* End of file democontroller.php */
登录后复制

?? ?这个文件里面我们只是建立了一个名为DemoController的对象并包含一个index的方法,该方法输出hello world。下面在index.php中执行DemoController中index方法。

?? ?index.php的代码如下

<?php require('controller/democontroller.php');
 $controller=new DemoController();
 $controller--->index();
/* End of file index.php */
登录后复制

?? ?运行index.php,ok如愿我们看到了我们久违的hello world。这两个文件非常简单,但也揭示了一点点mvc的本质,通过唯一入口运行我们要运行的控制器。当然controller部分应该是由uri来决 定的,那么我们来改写一下index.php使他能通过uri来决定运行那个controller。

?? ?index.php改写代码如下:

<?php $c_str=$_GET['c']; //获取要运行的controller
$c_name=$c_str.'Controller'; //按照约定url中获取的controller名字不包含Controller,此处补齐。
$c_path='controller/'.$c_name.'.php'; //按照约定controller文件要建立在controller文件夹下,类名要与文件名相同,且文件名要全部小写。
$method=$_GET['a']; //获取要运行的action
require($c_path); //加载controller文件
$controller=new $c_name; //实例化controller文件
$controller--->$method();
//运行该实例下的action
/* End of file index.php */
登录后复制

?? ?在浏览器中输入http://localhost/index.php?c=demo&a=index,得到了我们的hello world。当然如果我们有其他的controller并且要运行它,只要修改url参数中的c和a的值就可以了。

?? ?这里有几个问题要说明一下。

?? ?一、php是动态语言,我们直接可以通过字符串new出我们想要的对象和运行我们想要的方法,即上面的new $c_name,我们可以理解成new ‘DemoController’,因为$c_name本身的值就是’DemoController’,当然直接new ‘DemoController’这么写是不行的,其中的’DemoController’字符串必须通过一个变量来中转一下。方法也是一样的。

?? ?二、我们在url中c的值是demo,也就是说$c_name 的值应该是demoController呀,php不是区分大小写吗,这样也能运行吗?php区分大小写这句话不完整,在php中只有变量(前面带$的) 和常量(define定义的)是区分大小写的,而类名方,法名甚至一些关键字都是不区分大小写的。而true,false,null等只能全部大写或全部 小写。当然我们最好在实际编码过程中区分大小写。

三、视图

?? ?我们在前面的controller中只是输出了一个“hello world”,并没有达到mvc的效果,下面我将在此基础上增加视图功能,相信到这里大家基本已经能想到如何添加视图功能了。对,就是通过万恶的require或者include来实现。

?? ?首先我们在view文件夹下建立一个index.php,随便写点什么(呵呵,我写的还是hello world)。之后我们改写一下我们之前的DemoController。代码如下:

<?php class DemoController
{
function index()
{
require('view/index.php');
}
}
/* End of file democontroller.php */
登录后复制

?? ?再在浏览器中运行一下,看看是不是已经输出了我们想要的内容了。

?? ?接着我们通过controller向view传递一些数据看看,代码如下:

<?php class DemoController
{
function index()
{
$data['title']='First Title';
$data['list']=array('A','B','C','D');
require('view/index.php');
}
}
/* End of file democontroller.php */
登录后复制

?? ?view文件夹下index.php文件代码如下:

demo
<?php echo $data['title'];?>
<?php foreach ($data['list'] as $item)
{
echo $item.'';
}
?>
登录后复制

原文出处:http://www.cnblogs.com/kaixing/archive/2012/03/05/2380615.html

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何评估Java框架商业支持的性价比 如何评估Java框架商业支持的性价比 Jun 05, 2024 pm 05:25 PM

评估Java框架商业支持的性价比涉及以下步骤:确定所需的保障级别和服务水平协议(SLA)保证。研究支持团队的经验和专业知识。考虑附加服务,如升级、故障排除和性能优化。权衡商业支持成本与风险缓解和提高效率。

PHP 框架的轻量级选项如何影响应用程序性能? PHP 框架的轻量级选项如何影响应用程序性能? Jun 06, 2024 am 10:53 AM

轻量级PHP框架通过小体积和低资源消耗提升应用程序性能。其特点包括:体积小,启动快,内存占用低提升响应速度和吞吐量,降低资源消耗实战案例:SlimFramework创建RESTAPI,仅500KB,高响应性、高吞吐量

PHP 框架的学习曲线与其他语言框架相比如何? PHP 框架的学习曲线与其他语言框架相比如何? Jun 06, 2024 pm 12:41 PM

PHP框架的学习曲线取决于语言熟练度、框架复杂性、文档质量和社区支持。与Python框架相比,PHP框架的学习曲线更高,而与Ruby框架相比,则较低。与Java框架相比,PHP框架的学习曲线中等,但入门时间较短。

golang框架文档最佳实践 golang框架文档最佳实践 Jun 04, 2024 pm 05:00 PM

编写清晰全面的文档对于Golang框架至关重要。最佳实践包括:遵循既定文档风格,例如Google的Go编码风格指南。使用清晰的组织结构,包括标题、子标题和列表,并提供导航。提供全面准确的信息,包括入门指南、API参考和概念。使用代码示例说明概念和使用方法。保持文档更新,跟踪更改并记录新功能。提供支持和社区资源,例如GitHub问题和论坛。创建实际案例,如API文档。

Java框架的性能比较 Java框架的性能比较 Jun 04, 2024 pm 03:56 PM

根据基准测试,对于小型、高性能应用程序,Quarkus(快速启动、低内存)或Micronaut(TechEmpower优异)是理想选择。SpringBoot适用于大型、全栈应用程序,但启动时间和内存占用稍慢。

如何为不同的应用场景选择最佳的golang框架 如何为不同的应用场景选择最佳的golang框架 Jun 05, 2024 pm 04:05 PM

根据应用场景选择最佳Go框架:考虑应用类型、语言特性、性能需求、生态系统。常见Go框架:Gin(Web应用)、Echo(Web服务)、Fiber(高吞吐量)、gorm(ORM)、fasthttp(速度)。实战案例:构建RESTAPI(Fiber),与数据库交互(gorm)。选择框架:性能关键选fasthttp,灵活Web应用选Gin/Echo,数据库交互选gorm。

golang框架开发实战详解:问题答疑 golang框架开发实战详解:问题答疑 Jun 06, 2024 am 10:57 AM

在Go框架开发中,常见的挑战及其解决方案是:错误处理:利用errors包进行管理,并使用中间件集中处理错误。身份验证和授权:集成第三方库并创建自定义中间件来检查凭据。并发处理:利用goroutine、互斥锁和通道来控制资源访问。单元测试:使用gotest包,模拟和存根进行隔离,并使用代码覆盖率工具确保充分性。部署和监控:使用Docker容器打包部署,设置数据备份,通过日志记录和监控工具跟踪性能和错误。

golang框架性能比较:做出明智选择的指标 golang框架性能比较:做出明智选择的指标 Jun 05, 2024 pm 10:02 PM

选择Go框架时,关键性能指标(KPI)包括:响应时间、吞吐量、并发能力和资源使用。通过基准测试和比较框架的KPI,开发人员可以根据应用程序需求进行明智的选择,考虑预期负载、性能关键部分和资源限制。

See all articles