php单一入口模式可谓是现在一种比较流行的大型web应用开发模式,比如当前比较流行的一些php开发框架,zend,thinkphp,qeephp,还有cakephp 等他们都是采用的单一入口模式的。本文将就什么是单一入口模式,单一入口模式有哪些优点以缺点做一下研究。

什么是单一入口?

在解释什么是单一入口之前,先说说与之对应的多入口。多入口即通过访问不同的 php 文件运行对应的功能。比如刚开始学习 php 的时候,我们做一个项目通常都会如下这样做:

index.php - 网站首页

list.php?page=5 - 内容列表页
 
info.php?id=12 - 内容详细页
 
login.php - 用户登录页

对于这个项目来说,这其实就是一个多入口。

那么单一入口的应用程序就是说用一个文件处理所有的HTTP请求,例如不管是内容列表页,用户登录页还是内容详细页,都是通过从浏览器访问 index.php 文件来进行处理的,这里这个 index.php 文件就是这个应用程序的单一入口。

php 是如何实现单一入口的呢?

很简单,一般单一入口程序都是在访问index.php时附带一个特定的参数。例如:index.php?action=list 就可以定义为访问内容列表页,而 index.php?action=info 则可以定义为访问内容详细页等,具体实现代码如下:

1 $action=$_GET['action']==''?'index':$_GET['action'];//从url中取出action参数,如果没有提供action参数,就设置一个默认的'index'作为参数
2 include('files/'.$action.'.php');//根据$action参数调用不同的代码文件,从而满足单一入口实现对应的不同的功能

以上这个就实现了一个最简单的单一入口模式程序,当然真正的单一入口模式会比这个要复杂很多。但只要懂得如何合理组织各个功能的处理代码并遵循一定的步骤,也可以轻松的解决掉这个难题,下面就一个后台的例子来做一下说明:

比如我们现在要做一个新闻管理的后台。那么首先,对于应用程序的功能要做出一个合理的分解。例如后台的新闻栏目可能包含“添加新闻”、“编辑新闻”、“删除新闻”等多个功能。这时我们就可以将这一组逻辑上关联的功能组合到一个功能模块中,称为“新闻管理”模块。
按照上面的方法整理完应用程序的功能,我们就会得到多个功能模块,而每个模块又是由多个功能组成(实际上,即便不是单一入口应用程序,功能的整理也是必须的步骤)。

整理完功能后,我们就需要确定如何存放各个功能的代码。这里我推荐两种方式:

1、每个功能模块一个子目录,目录里的每一个文件就是一个功能的实现代码。

这种方式的好处是每个功能的代码都互相隔离,非常便于多人协作。缺点是每个功能之间共享代码和数据不那么方便。例如新闻管理模块中的所有功能都需要一个“取出新闻栏目记录”的功能,那么采用这种多个独立文件的组织方式,“取出新闻栏目记录”就只能写在另一个文件中,然后由需要该功能的文件include 进去。

2、每个模块一个文件,模块中的每个功能写成一个函数或者一个类方法。

好处不用多说了,非常便于共享代码和数据。缺点就是如果几个人同时改,容易发生冲突。不过借助版本控制软件和差异比较合并工具,冲突还是很容易解决的。

单一入口应用程序对应多入口有哪些优势呢?

单一入口应用程序的所有http请求都是通过index.php接收并转发到功能代码中去的,所以在index.php里面就能完成许多实际工作(所有页面都需要做的且都一样的工作)。比如进行集中的安全性检查,访问统计等等,如果不是单一入口,那么开发者就必须记得在每一个文件的开始加上安全性检查代码,当然,你也许会说,多入口的安全性检查可以写到另一个文件中,然后include一下就可以了。但实际针对一个相对较大型一点的应用项目,在几十个文件中保持头部的几个include都一致可不是一件让人省心的事。

与安全性检查类似。在入口里,我们还可以对url参数和post进行必要的检查和特殊字符过滤、记录日志、访问统计等等各种可以集中处理的任务。这样就可以看出,由于这些工作都被集中到了index.php来完成,可以减轻我们维护其他功能代码的难度。

单一入口应用程序的缺点?

任何事情都有两面性,单一入口应用程序也不例外。由于所有http请求都是访问 index.php ,所以程序的 url 看起来不那么美观,特别是对搜索引擎来说不太友好。比如下面这个 url:

http://www.smsyun.com/index.php?m=posts&a=index

我们知道这种URl不太方便记忆,而且搜索引擎不认它是一个正常的 URL,当然是相比下面这种 URl 来说的:

http://www.smsyun.com/index.php/posts/index/

不过这个也不是什么大问题,可以采用url重写、PATHINFO等方式就可以轻松解决这个问题。

OK,单一入口模式就写这么多了,当然要想深刻理解单一模式,最好的办法还是自己尝试着用单一入口模式写一个小应用出来深刻体会一下。

php单一入口和多入口模式详细讲解的更多相关文章

  1. thinkphp单入口和多入口的访问方法

    完全是参考thinkphp的官网资料 现在, 基本上都是 用 单入口 的方式来做的! thinkphp可创建多入口和单入口两种模式,本文主要讲解创建方法和两者的区别. TP版本:3.1.3 前端:Ho ...

  2. 基于Java 生产者消费者模式(详细分析)

    Java 生产者消费者模式详细分析 本文目录:1.等待.唤醒机制的原理2.Lock和Condition3.单生产者单消费者模式4.使用Lock和Condition实现单生产单消费模式5.多生产多消费模 ...

  3. IDea 工具debug模式详细使用说明

    IDea 工具debug模式详细使用说明 IDEA中如何使用debug调试项目 一步一步详细教程 Debug用来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常发生 ...

  4. node+vue进阶【课程学习系统项目实战详细讲解】打通前后端全栈开发(1):创建项目,完成登录功能

    第一章 建议学习时间8小时·分两次学习      总项目预计10章 学习方式:详细阅读,并手动实现相关代码(如果没有node和vue基础,请学习前面的vue和node基础博客[共10章]) 视频教程地 ...

  5. vue-cli 目录结构详细讲解

    https://juejin.im/post/5c3599386fb9a049db7351a8 vue-cli 目录结构详细讲解 目录 结构预览 ├─build // 保存一些webpack的初始化配 ...

  6. C++语言堆栈的详细讲解

    本文主要向大家介绍了C++语言堆栈的详细讲解,通过具体的内容向大家展示,希望对大家学习C++语言有所帮助. 一.预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1.栈区 ...

  7. 30 道 Vue 面试题,内含详细讲解(涵盖入门到精通,自测 Vue 掌握程度)

    前言 本文以前端面试官的角度出发,对 Vue 框架中一些重要的特性.框架的原理以问题的形式进行整理汇总,意在帮助作者及读者自测下 Vue 掌握的程度.本文章节结构以从易到难进行组织,建议读者按章节顺序 ...

  8. Unix操作系统中UUCP知识详细讲解

    导读 Unix操作系统有很多值得学习的地方,这里我们主要介绍Unix操作系统中的uucp,大家一起来学习下吧!UUCP系统是一组程序,完成文件传输,执行系统之间的命令,维护系统使用情况的统计,保护安全 ...

  9. Siki_Unity_2-1_API常用方法和类详细讲解(下)

    Unity 2-1 API常用方法和类详细讲解(下) 任务101&102:射线检测 射线origin + direction:射线检测:射线是否碰撞到物体 (物体需要有碰撞器),碰撞物体的信息 ...

随机推荐

  1. UVA11019 Matrix Matcher (AC自动机)

    二维的矩阵匹配,把模式矩阵按列拆开构造AC自动机,记录行号(为了缩点判断). 把T矩阵按行匹配,一旦匹配成功,在假想的子矩阵左上角位置加一.最后统计总数. 因为所有模式串长度一样,不用维护last数组 ...

  2. UVA 818 Cutting Chains 切断圆环链 (暴力dfs)

    题意就是给一张无向图,去掉某些结点,然后连成一条链,问最少去掉几个结点. n很小n<=15,所以直接枚举2^15个状态就行啦. 链的条件是1.无环,2.没有度大于2的点,3.把n个散链连起来需要 ...

  3. ecplise——python not configured报错

    解决方法:点击window——preferences——PyDey——pythonInterprter 最后成功

  4. 虚IP切换原理

    高可用性HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性.HA系统是目前企业防止核心计算机系统因故 ...

  5. ASP.NET 验证控件报错:WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResourceMapping。

    在Visual Studio 2012中添加并使用验证控件时,可能会遇到如下的错误: WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResour ...

  6. vue-awesome-swiper插件爬坑

    最近自己在做一个基于vue的知乎的移动端单页面,遇到很多坑,先说一下遇到最大的坑,其实并不推荐使用 vue-awesome-swiper,如果项目应用轮播,切换少的话.言归正传,现在来介绍vue-aw ...

  7. Python自学笔记_

    1. if语句 判断语句. 1 a=2 2 b=3 3 if a>b: 4 print("a>b") 5 else: 6 print("a<b" ...

  8. html5音频audio对象处理以及ios微信端自动播放和息屏后唤醒的判断---可供参考(功能都完整实现了,只是细节还没处理的很好)

    // html模版中的 此处结合了weui样式整合的微信手机端片段代码(不可直接粘贴复制进行使用)里面含有一些php的写法,可直接略过..###重点参考js代码### <div> < ...

  9. Python爬虫,爬取实验楼全部课程

    目的: 使用requests库以及xpath解析进行实验楼所有课程,存入MySQL数据 库中. 准备工作: 首先安装,requests库,lxml库,以及peewee库.在命令行模式,使用以下命令. ...

  10. huu 1251

    #include <iostream> #include <cstdio> #include <cstring> #include <string> # ...