php只是实现了MVC
在PHP中使用MVC越来越流行,尤其是在一些开源框架中。MVC足以应对大多数情况,但仍有一些情况不适合它,比如简单的个人博客。对于只有几百篇文章的博客来说,使用MVC让人觉得有些过于复杂。同样,对于新浪这样的门户网站,使用MVC会加载大量文件,对速度的影响是不可接受的。逢蒙介绍了MVC的基本原理和一个简单的实现。下面的介绍适用于PHP开发。
PHP中的MVC。
MVC[1]是软件工程中的一种软件架构。从php的角度来看,MVC有一些不同。
模型,程序应用功能的实现,以及程序逻辑的实现。负责PHP中的数据管理和数据生成。
视图,图形界面逻辑。负责PHP中的输出,处理如何调用模板和所需的资源文件。
负责转发和处理请求的控制器。根据PHP中的请求决定调用哪个视图和使用哪个数据。
为什么要用MVC?
MVC的主要功能是对代码进行分层和分类。
MVC的主要目的是将Web开发中的开发和设计工作分开,使其工作相对独立。
在这个过程中,还发现了一些其他的优势,比如网站的目录结构更加清晰,网站的维护和扩展更加容易,模块的复用。
MVC实现
请求网址
首先,请求页面时的网址是按照以下结构约定和实现的:
复制代码如下:localhost/index.php?c=demoa=indexparam=欢迎
如果你想得到一个更漂亮的URL结构,可以进行优化,因为这个URL结构优化和这篇文章关系不大,所以我们后面会分享。
从上面的参数可以看出,被访问的文件是index.php,包含三个参数,即c、a和param。
MVC目录结构
然后,规划MVC的目录结构如下:
复制代码如下:/*www #网站根目录 controller #控制器目录democontroller.php #演示控制器 model #模型目录model.php #模型目录 view #视图目录
控制器
将以下代码添加到controller/democontroller.php文件中。
复制的代码如下://controller/demo controller . phpclass demo controller { public function index(){ echo ' hello world };}}//类结束演示控制器//文件结束democontroller.php
这个文件中只定义了一个DemoController类,它只包含一个输出hello world的索引方法。
将以下代码添加到门户文件index.php文件中。
复制的代码如下://index . phprequire(' controller/demo controller . PHP ');$ controller=new DeMocontroller();$ controller-index();//index.php的终结
使用上面指定的网址在浏览器中访问,并看到输出hello world。当然,如果您请求的网址不是那样的,您可以获得如下所示的相同输出。
复制代码如下:localhost/index.php?c=abc
我发现网址中的参数还没有效果。
如果您使用以下网址进行访问,您可能不会看到任何输出。
复制的代码如下: localhost/controller/demo controller . PHP。
可以看出,如果你想访问这个网站并获得正确的结果,目前只能通过index.php访问,这就是为什么它被称为门户文件。现在不管参数如何,都只能访问同一个页面,那么如何决定显示不同的结果呢?还是叫不同的控制器?
改进条目文件
使用网址中的参数决定使用哪个控制器。
复制代码如下://index.php//get运行时控制器前缀$ c _ str=$ _ get[' c '];//控制器$c_name=$c_str的全名。“控制器”;//控制器$c_path的路径='controller/'。$c_name。PHP ';//get运行时操作$ method=$ _ GET[' a '];//加载控制器file require($ c _ path);//实例化控制器$ controller=new $ c _ name//运行controller方法$ controller-$ method();//index.php的终结
另外,使用上面在浏览器中指定的URL进行访问,并看到输出hello world。代码中的注释已经解释了每个步骤的目的。当然,可以通过改变URL参数中的C和A值来调用不同的控制器及其方法,以输出不同的结果。
视角
以前只使用控制器控制器,在门户文件index.php中动态调用不同的控制器。然后添加视图将显示分离。
复制代码如下://view/index.php类index { public function display($ output){//ob _ start();echo $输出;} }//index.php的终结
Index方法是在视图目录的Index文件中定义的,只有一个display()函数,负责输出传递给它的变量。修改下面的控制器文件。
复制代码如下://controller/demo controller . phpclass demo controller { private $ data=' hello fur zoom!'。公共函数index(){//echo ' hello world ';需要(' view/index . PHP ');$ view=new Index();$ view-display($ data);}}//类结束演示控制器//文件结束democontroller.php
控制器中定义了一个数据私有变量,index()方法不再直接输出,而是使用view对象来处理输出。这时,按照上面约定的网址访问时,会看到输出:
你好福尔祖姆!您可以根据不同的请求调用不同的视图类,并以不同的形式显示数据。这样会增加视图的功能,设计师只能为视图设计页面。
模型
上面看起来很酷,但是说明了控制器里直接指定了什么样的内容,希望内容也用URL指定,这样数据处理就交给模型了。
复制的代码如下://model/model . phpclassmall { private $ data=array(' title '=' hello fur zoom ',' welcome'='欢迎来到fur zoom.com ',);公共函数getData($ key){ return $ this-data[$ key];} }//model.php的终结
视图文件model定义了一个模型类,其中定义了一个getData()方法来返回请求的数据。
同时,修改条目文件index.php如下:
复制代码如下://index.php//get运行时控制器前缀$ c _ str=$ _ get[' c '];//控制器$c_name=$c_str的全名。“控制器”;//控制器$c_path的路径='controller/'。$c_name。PHP ';//get运行时操作$ method=$ _ GET[' a '];//get运行时参数$ param=$ _ GET[' param '];//加载控制器file require($ c _ path);//实例化控制器$ controller=new $ c _ name//运行controller方法$ controller-$ method($ param);//index.php的终结
参数$param被添加为控制器的方法调用参数。
还需要修改控制器的方法,根据不同的参数获得不同的数据。
复制代码如下://controller/demo controller . phpclass demo controller {//private $ data=' hello fur zoom!'。函数索引($ param){//echo ' hello world ';需要(' view/index . PHP ');需要(' model/model . PHP ');$ Model=new Model();$ view=new Index();$ data=$ model-GetDATa($ param);$ view-display($ data);}}//类结束演示控制器//文件结束democontroller.php
包括所需的视图文件和模型文件,然后生成视图和模型文件,然后通过模型对象获取数据,然后使用视图对象输出获取的数据。
此时,使用上面指定的网址在浏览器中访问,输出如下:
欢迎来到furzoom.com,如下图所示:
至此,PHP的MVC模式已经基本介绍完毕,剩下的工作就是根据需要进行添加和扩展,非常简单!
版权声明:php只是实现了MVC是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。