柔情似水 发表于 2015-2-4 00:28:39

PHP教程之PHP5中MVC布局进修

PHP的理解是新手最难迈过的一道门槛,不过你应该感到幸运的是PHP已经最大极限的为了新手而努力了,如果你学过其他的语言,也许会觉得PHP的确相当的简单,但是如果你之前什么都没学过,那么阿弥陀佛,硬着头皮琢磨吧。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);"函数

三.语法

模板复杂语法申明:
普通利用右边大括号"{"和右侧大括号"}"作为模板语法的入手下手和停止,固然也能够利用自界说的分隔符,如利用"["和"]",以下申明以大括号为分隔符停止申明

(注;上面的和两头的代码才是模板语法代码)

1.在模板文件中利用PHP代码,如:

{php}
$i = 3;
echo $i;
{/php}

请参考"example6"

2.在模板中利用foreach轮回,如:


第一种用法(轮回数组$a,相当于PHP中的foreach($a as $k=>$v)....)

{foreach:$a,$k,$v}
$v = {$v}<br>
{/foreach}


第二种用法(可以设定轮回几回,假设数组$a有15个元素,则上面的轮回则只取最后面5个)

{foreach:$a,$k,$v,5}
$v = {$v}<br>
{/foreach}


第三种用法(可以设定轮回几回,假设数组$a有15个元素,则上面的轮回则从第3个元素入手下手,取到第5个元素停止)

{foreach:$a,$k,$v,3,5}
$v = {$v}<br>
{/foreach}

请参考"example1"和"example3",在"foreach"轮回中可使用多维数组,详细请看"example10"

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

第一种用法

{if:$a == "hello"}
变量$a的值是"hello"
{/if}


第二种用法

{if:$a == true}
变量$a为真
{else}
变量$a不为真
{/if}


第三种用法

{if:$a == 2}
变量$a的值为2
{elseif:$a == 3}
变量$a的值为3
{/if}

详细利用请参考"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轮回
以下代码所示

{for:5,1000,1,$i}
{$i}<br>
{/for}
{/tplCode}
参数申明:
5:暗示从5入手下手轮回
1000:暗示轮回到1000停止
1:暗示每次轮回的增量为1,相当于$n++
$i:暗示失掉每次轮回的值
(下面的"5","1000","1"之类的常数也可用变量来取代,如:{for:$num,$max,$step,$i},个中的变量是在法式顶用"assign()"办法赋值的)
也参考以下代码(了解一下):

{for:500,30,-2,$i}
从500入手下手轮回,每次减2,直到30才停止,以后轮回的值是:<b>{$i}</b><br>
{/for}
{/tplCode}
详细利用请参考"example2","example11"

9.在模板中利用Email标签
第一种用法:

{email:redhat@hnwj.net}

第二种用法:

{email:redhat@hnwj.net,Redhat的邮箱}

第三种用法:

{email:redhat@hnwj.net,这是"Redhat"的邮箱<-dh->这个是带款式的<-dh->class=m,m}

详细利用请参考"example5"

10.在模板中界说变量

{assign:$tplVar,这是我界说的变量<-dh->可以在模板中输入也可用PHP代码输入}

详细利用请参考"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,保留在以后目次下,即"./"),内容以下:
<?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/"下).内容以下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>{$title}</title>
</head>
<body>
{$content}<br>
<br>
{$foot}
</body>
</html>

3.在阅读器阅读http://domain/path/to/3tvx.x/3t/first.php便可看到了局,固然你先要把PHP的运转情况设置装备摆设好.
4.更多例子请看法式自带的"example"系列...
五.类属性(局部)
$tplDir:String,"./tpl/"
模板文件的目次,需求加载的模板就从此处加载

$cmpDir:String,"./cmp/"
编译后的PHP文件寄存目次

$cheDir:String,"./che/"

$tplFile:String,""
模板文件,所要解析的模板主文件

$startLeft:String,"{"
模板变量的右边界符号,可以本人经由过程setLeft(String $s)办法去设置

$startRight:String,"}"
模板变量的右侧界符号,可以本人经由过程setRight(String $s)办法去设置
 

六.类办法(局部)
TTT(String|null)
类机关器,可以在此直接设置需求解析的模板,如:$obj->TTT("head.tpl");

setLeft(String)
设置模板变量"$startLeft"的右边界,该变量默许为"{"

setRight(String)
设置模板变量"$startRight"的右边界,该变量默许为"{"

setTplDir(String)
设置模板的寄存途径,此办法的同名办法是"setTemplatesFile()"

setCmpDir(String)
设置模板编译后的寄存途径,此办法的同名办法是"setCompilesFile()"

setCheFile(String)
设置缓存的模板文件目次,此办法的同名办法是"setCachesFile()"

setCacheFilter(String|array)
当利用了模板的缓存功效时,利用此办法设置的文件将不被缓存处置

setWordsFilter(array)
设置不宜在网站上显示的字符或字符串,如:$ttt->setWordsFilter('abc','xyz');,把网页中的一切"abc"交换成"xyz";

setWordsFile(String|array)
当设置了不宜在网站上显示的字符或字符串时,用此办法设置的文件中的字符或字符串将会不受"setWordsFilter()"办法影响而直接显示

setQuery(String)
此办法只在利用了模板的缓存功效时才利用,次要是用来设置独一的一串字符以使缓存文件不会反复,假如没有设置的话模板也会主动获得但会使法式变的不平安,只需不休的向法式GET分歧的参数变会一向生成分歧的缓存文件,N工夫后,我想你办事器的硬盘就没空间了,固然这些只要在你利用了缓存功效并没有利用此办法设置独一字符串所酿成的,所以准确设置并在法式中处置一些GET或POST的值就显的很主要。可以像如许利用此办法"$ttt->setQuery("typeid=$tid&msgid=$sid")",这里要注重当歹意用户提交分歧的$tid或$sid时也会招致上述的进击事务,所以必需在法式中捕获到不法的$tid和$sid并中断履行"$ttt->display()"办法。

assign(String,String|array)
设置在模板中要用到的变量,第一个参数为模板中要用到的变量,第二个参数为用户界说的值,以下:
$obj->assign('webName','主页名字');
$obj->assign('userID',array(23,37,12,18));

display(String|null)
输入解析后的模板,参数为要输入的模板文件名(假如在类的初始化或利用了办法"setTplFile()"已设置过,在利用本办法时可以不必带参数)


培训的第二阶段,开始了PHP语言语法结构和应用的学习。

透明 发表于 2015-2-4 13:11:32

学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql

活着的死人 发表于 2015-2-8 18:44:17

刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。

山那边是海 发表于 2015-2-25 22:08:09

遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。

第二个灵魂 发表于 2015-3-1 12:52:55

刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。

兰色精灵 发表于 2015-3-4 05:05:47

本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。

精灵巫婆 发表于 2015-3-11 17:22:28

找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。

因胸联盟 发表于 2015-3-19 03:20:23

首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。

乐观 发表于 2015-3-27 00:08:22

php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。

只想知道 发表于 2015-4-1 18:18:03

其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎

金色的骷髅 发表于 2015-4-3 04:39:40

这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己

小魔女 发表于 2015-4-6 04:09:33

有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。

小妖女 发表于 2015-4-12 14:41:21

装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。

愤怒的大鸟 发表于 2015-4-16 17:35:20

Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81

admin 发表于 2015-4-20 17:06:14

这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己

深爱那片海 发表于 2015-4-29 07:07:24

环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。

老尸 发表于 2015-5-3 20:53:11

再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。

仓酷云 发表于 2015-7-9 21:38:58

再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。

飘灵儿 发表于 2015-7-9 21:49:39

这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。

变相怪杰 发表于 2015-7-10 22:01:46

对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
页: [1]
查看完整版本: PHP教程之PHP5中MVC布局进修