首页 php教程 php手册 PHP5中MVC结构学习

PHP5中MVC结构学习

Jun 21, 2016 am 09:14 AM
example php quot string

php5

一.介绍

  现在在开发WEB应用的时候,比较流行的一种做法就是使用“MVC”结构,使用如此方式去开发WEB应用程序,逻辑性强、简浩明了,使程序设计起来更加方便,快捷。何为“MVC”呢?简单的来说,它就是“模型(Model)”、“视图(View)”及“控制器(Controller)”的结合体,也就是所有的“三层”抽象结构,当然这里所说的“MVC”是针对WEB上应用而言的,“使代码和页面设计分开”便是其主导思想,这一思想在使用Java Servlet/JavaServer Pages技术的“Struts”中表现的淋漓尽致,有兴趣的可以去http://jakarta.apache.org/struts看看,这种设计模式使的程序设计人员可以专注于代码的设计、编写及调试,网页设计人员可以有更多的时间去投入设计而不用理会具体的功能实现,这种分工方式完全适应大型项目或企业级的分布式应用开发。

  从PHP5的推出可以看到,其中的面向对象功能越来越完善,使用PHP来开发大型的商业网站或者分布式企业应用已经成为可能,如果再结合Zend Optimizer,已经实现了代码的封装性。

  如何在PHP中使用“MVC”设计模式去开发WEB应用呢?记住一点(代码和页面设计分开),用一个简单的例子演示一下,比如要从数据库中查询出会员的资料以显示在网页上,这里就需要考虑到两点:1.连接数据库并取出会员资料,2.把会员资料显示在网页上,连接数据库我们使用一个数据库的类,把它叫做“DB”类吧,这个类此时就扮演了“模型(Model)”的角色,接着我们需要编写一个操作“DB”类的程序以取出数据,这个程序所扮演的角色就是“控制器(Controller)”,它接受客户端“POST”或“PUT”的数据,然后再调用“DB”类以取出数据,把这些数据都存放在“控制器(Controller)”中,最后把数据传递给“视图(View)”并按照一定的排版格式显示出来,从上面的分析可以看出,模板在这里就是扮演了“视图(View)”的角色,当然仅仅一个模板类是不能说成是MVC的,真正的MVC不是这么简单的,具体可以参考一下“JSF”。

  “3t”是一个模板类,主要是读取“控制器(Controller)”的数据并进行一些特殊处理,最后通过一些简单的模板语法把数据显示出来,它具有一些什么样的特点呢?

解析速度快,可以根据需要选择使用html方式缓存或php方式缓存,当然你也可以不用缓存,同样可以实现快速稳定的WEB应用

使用简单、安装操作方便,在数据的读取方面类似著名模板类“SMARTY”,在数据显示方面即类似“PHP的语法”又类似“JavaBeans”

可扩展性好,你可以根据需要随时加入你想要的功能,因为它是开源的,在不久的日子里,将支持插件功能

伸缩性好,支持最新的PHP5,只要你的PHP版本>=4.0.6即可使用,当然你需要有在服务器操作文件的权限

功能强大,支持模板的多级嵌套,数组多级循环等等

当然此模板还需完善的地方很多,有待在各种环境测试使用才能不断完善,目前仅在LINUX和WINDOWS环境下测试通过.

二.安装

1.解压后应该可以看到如下目录结构:

./3tx.x/cmp/ 编译后的文件(请确保此文件夹可读写)
./3tx.x/tpl/ 模板文件(模板文件都放在这里,确保此文件夹可读)
./3tx.x/che/ 缓存文件存放的文件夹(请确保此文件夹可读写)
./3tx.x/ttt/ttt.php 3T模板类文件
./3tx.x/ 程序文件(您写的程序都放在这里)

2.您的PHP版本不能低于PHP4.0.6,我建议你的PHP版本升级至4.3.0以上,程序的整体性能将得到会大幅度提高

3.运行时如出现变量未定义请在程序前加上"error_reporting(7);"函数

三.语法

模板简单语法说明:
一般使用左边大括号"{"和右边大括号"}"作为模板语法的开始和结束,当然也可以使用自定义的分隔符,如使用"["和"]",以下说明以大括号为分隔符进行说明

(注;下面的[tplCode]和[/tplCode]中间的代码才是模板语法代码)

1.在模板文件中使用PHP代码,如:
[tplCode]
{php}
$i = 3;
echo $i;
{/php}
[/tplCode]
请参考"example6"

2.在模板中使用foreach循环,如:


第一种用法(循环数组$a,相当于PHP中的foreach($a as $k=>$v)....)
[/tplCode]
{foreach:$a,$k,$v}
$v = {$v}

{/foreach}
[/tplCode]

第二种用法(可以设定循环几次,假如数组$a有15个元素,则下面的循环则只取最前面5个)
[tplCode]
{foreach:$a,$k,$v,5}
$v = {$v}

{/foreach}
[/tplCode]

第三种用法(可以设定循环几次,假如数组$a有15个元素,则下面的循环则从第3个元素开始,取到第5个元素结束)
[tplCode]
{foreach:$a,$k,$v,3,5}
$v = {$v}

{/foreach}
[/tplCode]
请参考"example1"和"example3",在"foreach"循环中可以使用多维数组,具体请看"example10"

3.在模板中使用IF语句,如:

第一种用法
[tplCode]
{if:$a == "hello"}
变量$a的值是"hello"
{/if}
[/tplCode]

第二种用法
[tplCode]
{if:$a == true}
变量$a为真
{else}
变量$a不为真
{/if}
[/tplCode]

第三种用法
[tplCode]
{if:$a == 2}
变量$a的值为2
{elseif:$a == 3}
变量$a的值为3
{/if}
[/tplCode]
具体使用请参考"example2"及"example6"

4.在模板中包含模板文件,如:
{tplCode}
{includetpl:head.tpl}
{/tplCode}
这里包含了模板文件"head.tpl",所包含的模板文件必须在同一个目录下

5.在模板中包含PHP文件,如:
{tplCode}
{includephp:head.php}
{/tplCode}
这里包含了PHP文件"head.php",文件"head.php"在当前程序目录下
包含文件请看"example8"

6.在模板中输出时间,如:
{tplCode}
{date:Y-m-d H:i:s}
{/tplCode}
后面的"Y-m-d H:i:s"字符串是标准的PHP时间标识,具体使用可以参考PHP手册
具体使用请参考"example7"

7.在模板中使用数学函数

第一种用法,直接输出结果
{tplCode}
{math:3*2-5}
{/tplCode}

第二种用法,赋值给指定变量
{tplCode}
{math:3*2-5,$result}
{/tplCode}

第三种用法,赋值给指定变量,第三个参数设置是否立即输出,设为"Y"输出,"N"不输出
{tplCode}
{math:3*2-5,$result,Y}
{/tplCode}
具体使用请参考"example4"

8.在模板中使用FOR循环
如下代码所示
[tplCode]
{for:5,1000,1,$i}
{$i}

{/for}
{/tplCode}
参数说明:
5:表示从5开始循环
1000:表示循环到1000结束
1:表示每次循环的增量为1,相当于$n++
$i:表示得到每次循环的值
(上面的"5","1000","1"之类的常数也可用变量来代替,如:{for:$num,$max,$step,$i},其中的变量是在程序中用"assign()"方法赋值的)
也参考如下代码(理解一下):
[tplCode]
{for:500,30,-2,$i}
从500开始循环,每次减2,直到30才结束,当前循环的值是:{$i}

{/for}
{/tplCode}
具体使用请参考"example2","example11"

9.在模板中使用Email标签
第一种用法:
[tplCode]
{email:redhat@hnwj.net}
[/tplCode]
第二种用法:
[tplCode]
{email:redhat@hnwj.net,Redhat的邮箱}
[/tplCode]
第三种用法:
[tplCode]
{email:redhat@hnwj.net,这是"Redhat"的邮箱这个是带样式的class=m,m}
[/tplCode]
具体使用请参考"example5"

10.在模板中定义变量
[tplCode]
{assign:$tplVar,这是我定义的变量可以在模板中输出也可用PHP代码输出}
[/tplCode]
具体使用请参考"example6".

11.其它语法及功能尚在开发中......
有好的意见或想法请去http://2002.buyionline.net/2002/gbook.php提一下吧,发现BUG也请及时留言说明一下,谢谢!



注:
1.本模板支持多层嵌套的模板或PHP文件,支持多层foreach或for循环
2.实际使用技巧
在实际使用过程中如果把属性$cmpCheck设置为true则每次运行都会编译PHP程序,否则程序会根据编译后的PHP文件的存在时间长短判断是否要重新编译
该属性默值即为true,一般在正在使用中才设为false(可加快速度)
设置方法如:$tttObj->setCmpCheck(true);
3.本程序最大的缺点就是不能准确的捕捉程序中出现的语法错误信息
4.暂不支持缓存功能,如果你有好的想法不妨告诉我:-)
5.由于采用的是混编模式编译模板为PHP文件,所以请不要输错了(当然模板是支持大小写一致的写法的,也就是说你写一个{math:38*7}和{MatH:38*7}的效果是一样的),如输入"{foreach:$data,k,$v}"编译将通过,但运行的时候会导致一个语法错误,因为里面的"k"前面少了一个"$"符号.本来已经写好了对每一行进行语法分析捕捉错误的代码,但发现代码达到几百行的时候占用时间比较长,如果代码比较少还可以,但如果较多的话会导致性能的下降.而且PHP本身就有很不错的出错信息提示,后来想想就没有去进行每行代码的分析了.
6.不知大家是否注意到,在以上的标识中,参数都是不带引号或双引号的(条件判断语句除外),希望注意哦:-)

四.使用

1.建立PHP文件(命名为first.php,保存在当前目录下,即"./"),内容如下:
require_once "./ttt/ttt.php";//引入类文件
$ttt = new TTT();//初始化3T模板类的实例
$ttt->setTplDir("./tpl/");//需要编译的模板文件存放目录
$ttt->setCmpDir("./cmp/");//编译后文件的存放目录
$ttt->assign('title','天空的颜色');//设置变量
$ttt->assign('content','蓝色,天气不错,万里无云,晴');//设置变量
$ttt->assign('foot','欢迎欢迎');//设置变量
$ttt->display('first.tpl');//输出
?>

2.建立tpl文件(命名为"first.tpl",保存在目录"./tpl/"下).内容如下:





{$title}


{$content}



{$foot}



3.
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南 适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

如何设置 Visual Studio Code (VS Code) 进行 PHP 开发 如何设置 Visual Studio Code (VS Code) 进行 PHP 开发 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写

我后悔之前不知道的 7 个 PHP 函数 我后悔之前不知道的 7 个 PHP 函数 Nov 13, 2024 am 09:42 AM

如果您是一位经验丰富的 PHP 开发人员,您可能会感觉您已经在那里并且已经完成了。您已经开发了大量的应用程序,调试了数百万行代码,并调整了一堆脚本来实现操作

您如何在PHP中解析和处理HTML/XML? 您如何在PHP中解析和处理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示了如何使用PHP有效地处理XML文档。 XML(可扩展的标记语言)是一种用于人类可读性和机器解析的多功能文本标记语言。它通常用于数据存储

在PHP API中说明JSON Web令牌(JWT)及其用例。 在PHP API中说明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

php程序在字符串中计数元音 php程序在字符串中计数元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符组成的序列,包括字母、数字和符号。本教程将学习如何使用不同的方法在PHP中计算给定字符串中元音的数量。英语中的元音是a、e、i、o、u,它们可以是大写或小写。 什么是元音? 元音是代表特定语音的字母字符。英语中共有五个元音,包括大写和小写: a, e, i, o, u 示例 1 输入:字符串 = "Tutorialspoint" 输出:6 解释 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。总共有 6 个元

解释PHP中的晚期静态绑定(静态::)。 解释PHP中的晚期静态绑定(静态::)。 Apr 03, 2025 am 12:04 AM

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。

什么是PHP魔术方法(__ -construct,__destruct,__call,__get,__ set等)并提供用例? 什么是PHP魔术方法(__ -construct,__destruct,__call,__get,__ set等)并提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些?PHP的魔法方法包括:1.\_\_construct,用于初始化对象;2.\_\_destruct,用于清理资源;3.\_\_call,处理不存在的方法调用;4.\_\_get,实现动态属性访问;5.\_\_set,实现动态属性设置。这些方法在特定情况下自动调用,提升代码的灵活性和效率。

See all articles