聊聊mPHP之控制器的秘密(二)

[文章作者:磨延城 转载请注明原文出处: https://mo2g.com/view/47/ ]

上一篇文章介绍了自动加载类的使用方法,这一篇将给大家讲解mPHP如何实现简单的控制器功能.磨途歌假定读者不知道怎么访问php文件,在往下讲解前,先做一下相关说明,如果你已经掌握这方面的知识了,也可以花1分钟快速阅过,或者点击这里跳过直接学习mPHP的控制器思想.

上一篇文章介绍了自动加载类的使用方法,这一篇将给大家讲解mPHP如何实现简单的控制器功能。磨途歌假定读者不知道怎么访问php文件,在往下讲解前,先做一下相关说明,如果你已经掌握这方面的知识了,也可以花1分钟快速阅过,或者点击这里跳过,直接学习mPHP的控制器思想。

当我们在浏览器中通过下边3种方式对服务器进行访问时:

1)mo2g.com/

2)mo2g.com/?

3)mo2g.com/index.php

1)的访问方式在默认情况下会自动转换为为mo2g.com/index.php的形式,然后执行。

2)的访问方式在默认情况下会自动转换为为mo2g.com/index.php?,然后执行。

所以这三种访问方式都是调用的磨途歌博客根目录下的index.php文件。
很多MVC框架(包括mPHP框架)都根据上述特性,开发了单入口的访问模式。通俗的说法就是,用户只需要访问index.php文件,就能调用网站的所有功能,单入口的好处就是,易于管理。举两个例子:

1)某个学校只有一个校门,该学校只要在这里把大部分的的安保工作做好,校内学生的安全很大程度上就得到了保证。

2)另一个学校有多个校门,每多一个校门,该学校就得比上一家学校多花费一倍的人力物力来维系校内的安全。以至于有些学校有很多校门,但学生从入学到毕业,永远只开放一个,还经常有外来人员!

假设根目录下有下列文件:

1)index.php

2)mo2g.php

接下来讲解,磨途歌是如何实现只访问index.php文件,也能调用mo2g.php文件所拥有的功能。

index.php的代码如下:

<?php
//$c是控制器controller的缩写
//$a是动作action的缩写
$c = $_GET['c'];//获取GET传递过来的c值
$a = $_GET['a'];//获取GET传递过来的a值
include $c.'.php';//加载相应的php文件
$a();//调用相应的函数

mo2g.php的代码如下:

<?php
function mo2g() {
    echo '大家好,我是磨途歌';
}
function mPHP() {
    echo '大家好,我是mPHP';
}

然后就可以通过下边的方法,调用mo2g.php中的所有功能:

1)mo2g.com/index.php?c=mo2g&a=mo2g,会显示“大家好,我是磨途歌”。

2)mo2g.com/index.php?c=mo2g&a=mPHP,会显示“大家好,我是mPHP”。

根据上述的介绍,上边的调用可以简化为

1)mo2g.com/?c=mo2g&a=mo2g,会显示“大家好,我是磨途歌”。

2)mo2g.com/?c=mo2g&a=mPHP,会显示“大家好,我是mPHP”。

其实就是通过c=??指定要加载的php文件名,a=??指定要调用的函数名。磨途歌开发的mPHP框架的控制器模块就是基于这种调用模式 + 上一篇博客介绍的自动加载类实现的,很简单对吧。如果还有什么不明白的,磨途歌建议你立刻动手做如下实践:

1)先使用上边的代码,让程序正常运行,注:记得要把mo2g.com修改为你当前测试环境的地址,如localhost。

2)当我们直接以mo2g.com/?访问index.php的时候会报错,因为没有给index.php传递$c和$a的值,试着完善该代码。提示:当没给index.php传递任何值的时候,可以给$c和$a设置一个默认值。

3)按自己的想法,添加代码或php文件,让程序按预期的想法运行。

如果,还有什么不明白的,可以给磨途歌留言。

虽然实践未必是最好的老师,但经过自己的努力,把问题解决了,所收获的快乐与成就感,是学习下去的动力。

评论:

  1. 暂无评论...
  2. 我来说两句:

      切换  

    磨途歌检测发现,您当前使用的浏览器版本过低,要想使用画板模式,请先更新浏览器

      切换  

    磨途歌随机验证码