php-mvc概念

0x01 mvc的概念与作用

MVC是一种非常重要的设计模式,是三个字词的缩写,分别为:模型,视图,控制器,mvc模式的目的是实现web系统的职能分工,它强制性使应用程序的输入,处理和输出分开,可以各自处理自己的任务,是一种分层的概念,module层实现系统中的业务逻辑,view层用于实现与用户的交互,controller层是model与view之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图用于显示,同时它也可以解释用户的输入并将他们映射为模型层可执行的操作

mvc的设计思路是把一个应用的输入,处理,输出流程按照model,view和controller的方式进行分离,这样一个应用被分为三个层(模型,视图,控制)

0x02 mvc的优点

1.各施其职,互不干涉

在MVC模式中,三个层各施其职,所以如果一旦哪一层的需求发生了变zhi化,就只需要更改相应的层中的代码而不会影响到其它层中的代码。

2.有利于开发中的分工

在MVC模式中,由于按层把系统分开,那么就能更好的实现开发中的分工。网页设计人员可以进行开发视图层中的JSP,对业务熟悉的开发人员可开发业务层,而其它开发人员可开发控制层。

3.有利于组件的重用

分层后更有利于组件的重用。如控制层可独立成一个能用的组件,视图层也可做成通用的操作界面。

4.MVC设计模式可以说实现了分层开发。各个层都有各个层的作用。

5.降低了层与层之间的依赖,有利于代码的标准化开发

6.再用新的代码业务逻辑替换时,只需要替换相对应的层,大大降低了我们的工作量,分工明确。

0x02 mvc的缺点

1.增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。

2.视图与控制器间的过于紧密的连接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。

3.视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。

4.目前,一般高级的界面工具或构造器不支持MVC模式。改造这些工具以适应MVC需要和建立分离的部件的代价是很高的,从而造成使用MVC的困难。

5.麻烦,有些代码重复的过多,不利于在实际开发中使用,所以我们要学习框架,下面的鸟瞰图分析了框架在MVC里都替代了哪些层。

0x03 mvc

这里我们就需要分离开来

Index/Controller/IndexController.php

<?php
class IndexController{
	public function index(){
		echo 1;
	}
}

?>

Index/Controller/IndexController.php

<?php
class IndexController{
	public function index(){
		echo 1;
	}

	public function test(){
		echo 2;
	}
}

?>

index.php

<?php
$c = isset($_GET['c']) ? $_GET['c']."Controller" : 'IndexController';
$m = isset($_GET['m']) ? $_GET['m'] : "index";
$root_file = dirname(__FILE__)."/Index/Controller/";
if(!file_exists($root_file.$c.".php")){
	echo "错误异常";die;
}
include_once $root_file.$c.".php";
$info = new $c;
$info->$m();

?>

这里来写个mvc的登录框架
index.php

<?php


$c = isset($_GET['c']) ? $_GET['c']."Controller" : 'IndexController';
$m = isset($_GET['m']) ? $_GET['m'] : 'index';

$root_file = dirname(__FILE__)."/Index/Controller/";

if(!file_exists($root_file.$c.".php")){
	echo "错误异常";die;
}

include_once $root_file.$c.".php";
$info = new $c;
$info->$m();

/Controller/IndexController.php

<?php

class IndexController
{
	public function index()
	{
		if($_POST){
			include_once dirname(dirname(__FILE__))."/Model/IndexModel.php";
			$info = new IndexModel();
			$data = $info->index($_POST['username'],$_POST['password']);
			if($data){
				echo 1;
			} else {
				echo 2;
			}
		} else {
			include_once dirname(dirname(__FILE__))."/View/Index/index.tpl";
		}
	}
}

/Module/IndexModel.php

<?php
/**
* 
*/
class IndexModel
{
	public function index($name = "",$password = "")
	{
		if($name == "admin"){
			return true;
		} else {
			return false;
		}
	}
}
原文地址:https://www.cnblogs.com/yicunyiye/p/13786878.html