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

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
php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php怎么读取字符串后几个字符php怎么读取字符串后几个字符Apr 22, 2022 pm 08:31 PM

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

php怎么查找字符串是第几位php怎么查找字符串是第几位Apr 22, 2022 pm 06:48 PM

查找方法:1、用strpos(),语法“strpos("字符串值","查找子串")+1”;2、用stripos(),语法“strpos("字符串值","查找子串")+1”。因为字符串是从0开始计数的,因此两个函数获取的位置需要进行加1处理。

See all articles

热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.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

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

禅工作室 13.0.1

禅工作室 13.0.1

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