多数大学生出来选择的工作和专业无关
首页 > 专业知识

详解PHP实现MVC的几种方法

时间:2018-12-22 17:41:51 [来源]:郑州PHP培训学校

   详解PHP实现MVC的几种方法

  这里将介绍PHP实现MVC的几种方法,使用面向对象的方式来实现MVC模式,将为我们梳理程序的架构提供一个清晰的思路。
  我们这里介绍PHP实现MVC的几种方法,首先将从什么是MVC,然后以代码的形式介绍PHP实现MVC。相信所有习惯了使用MVC来组织自己的项目的人,让他选择一个新的项目构架时,一定不会放弃MVC。
  传统的面相过程式的开发方式在处理中型以上的应用时,就开始显得力不从心。即便我们能够快速的完成需求,但是在需求发生变更后或者进行后期维护的时候,我们会深深地陷入我们早期搭建的陷阱中。
  什么是MVC?
  关于MVC的定义和解释,可以说多种多样。我们可以在Wiki或者[2]中找到更为详尽的解释,这里我并不打算,也没有能力进行深入的讲解,从PHP开发的角度来讲,MVC可以概括为:
  视图(The View):
  一说到视图,我们很多人都会想到模板引擎(诸如Smarty等等)。其实就是各种各样的输出,比如说html模板和Javascript文件等。
  模块(The Model)
  模块代表了程序的逻辑,在企业应用中通常称为业务逻辑层。一般来讲,这一层完成的工作是把原始的数据处理成按照我们设计的数据结构存储的有意义的数据序列,并将这些数据交给视图去处理。通常情况下, 模块中会利用一个数据抽象类来进行与数据操作有关的处理。
  Model通常包含了哪些用来同数据库打交道的函数。
  控制器(The Controller)
  控制器使所有WEB应用的第一站,他接受收到的参数,比如$_GET变量,然后做出相应的反应。
  关于MVC的是否适合PHP的争论也很多,人们不断的讨论MVC是否适合PHP[3],现在也已经有了很多的MVC框架,诸如PHP MVC Frameworks中列出的[4]。那么,为什么人们这么热衷于MVC,我们为什么要使用MVC在我们的设计中呢。
  为什么用MVC?
  MVC最早是用来解决桌面GUI的编程问题,最早的MVC框架应该是Sun在1999年提出的Model 2,后来演变成了Struts。MVC带给人们深刻的印象,但是我们在使用的过程中,却并没有认真的想过为什么使用MVC。
  在传统的桌面应用中,一旦Model中有时间发生,我们可以主动的让View界面进行刷新,从而展示后台发生的变化。而在Web应用中,我们似乎限于传统的Http的Request/Response的方式,我们似乎没有办法让用户端进行更新。这一段讨论,并不是认为MVC不能够用来进行WEB应用的开发,而是觉得从某种程度上来说,他还不是最合适的。
  关于使用MVC的争论还有很多[1],但是相信所有习惯了使用MVC来组织自己的项目的人,让他选择一个新的项目构架时,一定不会放弃MVC。
  PHP命名空间规则解析及高级功能
  日前发布的PHP 5.3中,最重要的一个新特性就是命名空间的加入。本文介绍了PHP命名空间的一些术语,其解析规则,以及一些高级功能的应用,希望能够帮助读者在项目中真正使用命名空间。
  在第一部分中我们介绍了PHP命名空间的用途和namespace关键字,在这篇文章中我们将介绍一下use命令的使用以及PHP如何解析命名空间的名字的。
  为了便于对比,我定义了两个几乎一样的代码块,只有命名空间的名字不同。
  lib1.php
  < ?php
  // application library 1
  namespace App\Lib1;
  const MYCONST = 'App\Lib1\MYCONST';
  function MyFunction() {
  return __FUNCTION__;
  }
  class MyClass {
  static function WhoAmI() {
  eturn __METHOD__;
  }
  }
  ?>
  lib2.php
  < ?php
  // application library 2
  namespace App\Lib2;
  const MYCONST = 'App\Lib2\MYCONST';
  function MyFunction() {
  return __FUNCTION__;
  }
  class MyClass {
  static function WhoAmI() {
  eturn __METHOD__;
  }
  }
  ?>
  开始之前先要理解几个PHP命名空间相关术语。
  完全限定名称(Fully-qualified name)
  任何PHP代码都可以引用完全限定名称,它是一个以命名空间反斜线开头的标识符,如\App\Lib1\MYCONST,\App\Lib2\MyFunction( )等。
  完全限定名称是没有任何歧义的,开头的反斜线和文件路径的作用有点类似,它表示“根”全局空间,如果我们在全局空间中实现了一个不同的MyFunction( ),可以使用\MyFunction( )从lib1.php或lib2.php调用它。
  完全限定名称对一次性函数调用或对象初始化非常有用,但当你产生了大量的调用时它们就没有实用价值了,在下面的讨论中我们将会看到,PHP提供了其它选项以解除我们为命名空间打字的烦恼。
 
  PHP正则表达式的几则使用技巧
  PHP正则表达式,作为一种快速、便捷的处理字符串的工具,在各种编程语言中都有着广泛的用途,通过在PHP中的一些使用,下面记录一下关于PHP正则表达式的一些相关技巧。
  PHP正则表达式主要用于字符串的模式分割、匹配、查找及替换操作。使用正则表达式在某些简单的环境下可能效率不高,因此如何更好的使用PHP正则表达式需要综合考虑我的PHP正则入门,是起源于网上的一篇文章,这篇文章由浅入深的阐述了PHP正则表达式使用的方法,我觉得是一个很好的入门材料,不过学成还是要靠个人,在使用的过程中,还是会不断地忘记,因此反反复复的阅读了这篇文章有四五遍,对于其中一些比较困难的知识点,甚至要用很久才能消化,但是只要能见坚持着看完,你会发现自己对于正则的运用能力就会显著提高。
  PHP正则表达式的定义:
  用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。
  PHP中的正则函数:
  PHP中有两套正则函数,两者功能差不多,分别为:
  一套是由PCRE(Perl Compatible Regular Expression)库提供的。使用“preg_”为前缀命名的函数;一套由POSIX(Portable Operating System Interface of Unix )扩展提供的。使用以“ereg_”为前缀命名的函数;(POSIX的正则函数库,自PHP 5.3以后,就不在推荐使用,从PHP6以后,就将被移除)由于POSIX正则即将推出历史舞台,并且PCRE和perl的形式差不多,更利于我们在perl和php之间切换,所以这里重点介绍PCRE正则的使用。
  PCRE正则表达式
  PCRE全称为Perl Compatible Regular Expression,意思是Perl兼容正则表达式。
  在PCRE中,通常将模式表达式(即正则表达式)包含在两个反斜线“/”之间,如“/apple/”。
  正则中重要的几个概念有:元字符、转义、模式单元(重复)、反义、引用和断言,这些概念都可以在文章[1]中轻松的理解和掌握。
  常用的元字符(Meta-character):
  元字符     说明
  \A       匹配字符串串首的原子
  \Z       匹配字符串串尾的原子
  \b       匹配单词的边界     /\bis/   匹配头为is的字符串   /is\b/   匹配尾为is的字符串   /\bis\b/ 定界\B       匹配除单词边界之外的任意字符   /\Bis/   匹配单词“This”中的“is”
  \d     匹配一个数字;等价于[0-9]
  \D     匹配除数字以外任何一个字符;等价于[^0-9]
  \w     匹配一个英文字母、数字或下划线;等价于[0-9a-zA-Z_]
  \W     匹配除英文字母、数字和下划线以外任何一个字符;等价于[^0-9a-zA-Z_]
  \s     匹配一个空白字符;等价于[\f\t\v]
  \S     匹配除空白字符以外任何一个字符;等价于[^\f\t\v]
  \f     匹配一个换页符等价于 \x0c 或 \cL
  匹配一个换行符;等价于 \x0a 或 \cJ
  匹配一个回车符等价于\x0d 或 \cM
  \t     匹配一个制表符;等价于 \x09\或\cl
  \v     匹配一个垂直制表符;等价于\x0b或\ck\oNN   匹配一个八进制数字
  \xNN   匹配一个十六进制数字
  \cC    匹配一个控制字符

上一篇:国外优秀开源PHP建站程序一览

下一篇:探讨PHP数据过滤的安全之道