兰色精灵 发表于 2015-2-3 23:58:05

PHP教程之fastm设计思绪深度分析

在相册系统的开发上,因为采用的是团队分工合作方式,更让我明白了在一个团队之中,团队成员之间的交流沟通的重要性,如果没有很好的沟通交流,成员之间的任务没有分配好。     1.PHP(&fastm)把文档切割为复杂的DOM布局
  PHP模板的设计思绪十分大度,用正文里的Begin和End把HTML(WML,或任何XML)页面切割成分歧的块,并且块外面还可以持续切块。
  如许一来,一个页面被切割成一个树布局,很象DOM布局。只是DOM布局太甚粗笨,对每个元素都要创立一个节点,并且节点的类型十分庞杂。好比,一个HTML DOM布局,有几何种HTML元素,就会有几何种节点类型,好比,Body,Table,TR,TD,Form,Input等。
  而PHP模板则是一个轻量级的DOM布局,一个Begin-End块就是一个节点。Begin-End块只包含三种内容――静态文本,变量,和其它的Begin-End块。
  设计思绪如斯简约而壮大,易用而通用(可以用在任何标准或不标准的XML页面中,好比HTML,WML,乃至XUL,XAML),并且,可以在HTML编纂器中所见即所得。纵不雅世界模板手艺,莫出其右。
  我经由了多种Java页面手艺的熬煎,经同事引见,熟悉了PHP模板手艺,欣喜异常,本来竟有如许的好器材,只恨了解太晚。
  Fastm模板的思绪完整自创PHP模板思绪,只是略微做了一些扩大。(概况请拜见我的上一篇提到JDynamiTe的文章――Java页面手艺综述)。
  Fastm模板的BEGIN-END DYNAMIC块,就相当于PHP模板的Begin-End块。
  Fastm模板的BEGIN-END IGNORED块,就相当于PHP模板的疏忽不显示的Begin-End块。
  好比上面的HTML片段。
  <select name=”zipcode”>
              <!-- BEGIN DYNAMIC: zipcodes -->
              <option value=””></option>
              <!-- END DYNAMIC: zipcodes -->
  </select>
  咱们看到,这个片段包括一个BEGIN-END块(zipcodes),这个块里包括两个不异的变量,其它的局部都是静态文本。
  这个片段的fastm Template DOM布局以下:
  静态文本<select name=”zipcode”>
  静态块zipcodes --
                             | --- 静态文本<option value=”
                             | --- 变量
                             | --- 静态文本”>
                             | --- 变量
                             | ---静态文本 </option>
  静态文本</select>
  2.fastm的ValueSet是DOM概念的又一次奔腾
  Fastm模板DOM布局的一个中心特征就是,只能读取,不克不及改动。
  PHP代码每次装载一块PHP模板,然后静态改换外面的变量局部的值。PHP模板从实质上讲是可以读取,也是可以操作改动的。
  HTML(WML,XML)DOM更是如斯。法式直接修正DOM节点的值,才干失掉分歧的静态了局。可以说,XML DOM生成就是用来操作改动的。XML DOM自己又是模板,又是数据。
  可以改动的DOM布局不克不及够用在多线程的情况下。每一个线程必需获得本人的新颖DOM备份,停止操作改动,失掉本人的静态了局。想一想看,在一个静态文本占绝大局部的DOM布局里,这类做法将形成何等大的空间和工夫上的华侈。
  Fastm模板的DOM布局是只读的,不克不及改动。所以一个Fastm DOM可以用在多线程的情况中。
  既然咱们不克不及修改Fastm Template DOM,那末咱们若何给Fastm Template DOM赋值呢?咱们若何使用Fastm Template DOM取得静态了局呢?
  Fastm引入了ValueSet的概念。ValueSet是一个树形布局的静态数据集,用来婚配只读的Fastm模板DOM布局,生成静态了局。
  法式员必需事前机关好全部树形静态数据集(ValueSet DOM),然后把和ValueSet DOM和Fastm Template DOM联合起来,生成静态了局。
  所以,fastm的全部利用以下:
  (1)法式的全部运转过程当中,fastm模板文件(也就是加了BEGIN-END正文的HTML文件)只需求被解析一次,生成一个Fastm Template DOM。
  (fastm模板解析速度奇快,比JSP编译,Velocity解析,XML DOM解析,都快良多,大局部情形下乃至快于SAX解析。并且fastm DOM和原始fastm模板文件的巨细几近一样大,只多了一个List纪录分歧的块,空间效力也要凌驾)
  (2)法式生成分歧的ValueSet DOM,婚配只读的Fastm DOM,生成分歧的静态了局。
  (因为fastm Template DOM布局的复杂高效,全部婚配进程很快。凡是情形下,工夫效力乃至高于最快的纯JSP或Servlet。ValueSet DOM的空间效力比不上纯JSP或Servlet,但经由公道重用,最少可以接近纯JSP或Servlet的空间效力。今后的初级使用话题系列会具体解说这个成绩。)
  好比,咱们来为下面的Template DOM布局(zipcode Select)机关一个ValueSet DOM。
  String[] zipcodes = {“361005”, “100008”};
  IValueSet top = new ValueSet(); // 对应下面的全部HTML片段
  List items = new ArrayList(); // 对应 静态局部zipcodes
  for(int i = 0; i < zipcodes.length; i++){
              IValueSet item = new ValueSet();
              item.setVariable(“”,zipcodes);
              items.add(item);
  }
  top.setDynamicValueSets(“zipcodes”, items);
  咱们把top这个ValueSet DOM和Template DOM联合起来。就生成以下了局。
  <select name=”zipcode”>
              <option value=”361005”>361005</option>
              <option value=”10008”>100008</option>
  </select>
  咱们可以看到,Template DOM节点和ValueSet DOM节点之间不是逐一对应的关系,而是一对多的关系。一个Template DOM节点对应一个ValueSet List。ValueSet List包括几何个ValueSet,这个Template DOM节点就显示所少次。
  比起TagLib来,fastm的优势不言而喻。fastm的几行代码,或一个办法,可以完成一个或几个TagLib的功效。比起任何其它的页面手艺来讲,其它页面手艺能做到的,或做的好的,fastm都可以做失掉,并且做的更好。而fastm能做到良多其它页面手艺做不到的工作。好了。不多说了。J
  ValueSet DOM和Template DOM的分隔,是一个极大的思绪上的立异和奔腾。
  究竟,页面中的静态局部,和静态比起来,长短常小的一局部。ValueSet DOM代表静态局部,由法式随时生成,可以存在多份。Template DOM代表静态局部,只需求解析一次,并且只需求一份。
  ValueSet DOM和Template DOM的分隔,更是一种史无前例完全的显示和数据的分别。比XML/XSLT的办法加倍完全。XML的确是地道的数据,但XSLT中却不成防止的要包括逻辑。ValueSet DOM是地道的数据,没有任何逻辑,Template DOM是地道的显示模板,也没有任何逻辑。
  一份Template DOM可以用多个ValueSet DOM赋值。一样,一个ValueSet DOM也能够用于多个Template DOM,把不异的数据显示在分歧作风的模板中。
  好比,咱们还有如许一个HTML片段:
  <table>
              <!-- BEGIN DYNAMIC: zipcodes -->
              <tr><td></td></tr>
              <!-- END DYNAMIC: zipcodes -->
  </table>
  咱们把下面的top ValueSet赋给这个模板。失掉的了局以下。
<table>
              <tr><td>361005</td></tr>
              <tr><td>100008</td></tr>
  </table>
  咱们可以看到,Template DOM就是模板,只包括显示作风和分块界说。ValueSet DOM就是数据,只包括数据。
  Fastm具有其它页面熟成手艺不成对比的优胜性:
  所见即所得,模板与数据的完全分别,模板与数据的多对多自在婚配,易学易用,开辟速度快,运转空间小,运转速度快。
  就我团体的感到来讲,fastm几乎是处理一切页面手艺成绩的银弹。
  上文能够有些“自卖自诩”之嫌,特注释以下:
  我不是一个擅长吹捧的人。不然早就从事倾销员、公关宣扬之类有出路的职业去了。并且因为自我倾销才能和社会关系学才能的完善,已形成了本身的才能、精神和工夫上的极大华侈。我疾苦本人的近况,却不忏悔。我懂得社会的游戏划定规矩,但没有才能,也不肯、不屑介入。心坎里老是存在着一种胡思乱想,但愿发明一个游离于现有划定规矩以外的事业。
  别的,我是一个客不雅务实、思想周密明晰的人,具有“外举不避仇,内举不避子”的担任的学术精力。有一分,当说一分,决不多说一分,也毫不少说一分。
  3.fastm的可重用性的中心在于ValueSet DOM

  JSP手艺的可重用性的中心在于TagLib。
  XML DOM的可重用性的中心在于DOM节点的通用操作。
  Fastm的可重用性的中心在于ValueSet DOM节点的通用操作。好比,下面讲的那段生成ValueSet的代码。
  Template DOM自己可以作为一个只读模板来利用,一样,Template DOM上面包括有的任何Template DOM布局也能够作为一个自力的只读模板来利用。这点和XML DOM一样。XML DOM的任何一个节点可以作为自力的节点来利用。
  ValueSet DOM不但是数据重用的中心,一样是模板拼装重用的中枢。fastm完成各模板之间各个块的搬运拼装,再轻易不外了。完成所谓的Tile功效,小菜一碟。
  JSP,还有某些暗示逻辑的TagLib,Velocity模板,XSL文件,都是包括逻辑的模板。团体以为,模板中包括逻辑,是一种很好笑的行动。模板的优点在于体现页面结构、显示作风,而不在于逻辑。为何不让善于逻辑的Java去向理逻辑?
  在fastm中,Template DOM和ValueSet DOM中都不含有任何逻辑。一切的逻辑都落在Java代码中。而Java是一种高度面向对象的言语,其布局性和重用性是任何模板言语不克不及对比的。所以,fastm的可重用性的中心在于ValueSet DOM节点的通用操作。这些通用操作的代码固然由Java完成。
怎么培养啊 别光说不练啊,好 ,比如新人入门自己步是配置环境,虽然现在都有很多的集成环境,但是真实的体验下配置环境还是会有很多帮助,不论是你以后工作还是在真实的linux下开发。

飘飘悠悠 发表于 2015-2-4 07:47:00

当然这种网站的会员费就几十块钱。

只想知道 发表于 2015-2-4 07:47:00

在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、

若天明 发表于 2015-2-7 04:19:21

建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。

因胸联盟 发表于 2015-2-11 08:04:26

不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。

蒙在股里 发表于 2015-3-1 23:59:14

说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年具体的记不清啦,囧。

海妖 发表于 2015-3-11 01:06:02

首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。

小魔女 发表于 2015-3-17 17:10:58

,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。

若相依 发表于 2015-3-24 04:05:10

如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,

再现理想 发表于 2015-3-26 13:25:52

写的比较杂,因为我也是个新手,不当至于大家多多指正。

乐观 发表于 2015-4-3 05:08:35

我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。

小妖女 发表于 2015-4-8 12:05:31

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

深爱那片海 发表于 2015-4-16 20:32:12

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

分手快乐 发表于 2015-4-29 17:17:36

首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。

第二个灵魂 发表于 2015-5-4 02:58:09

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

飘灵儿 发表于 2015-5-4 10:00:50

当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,

仓酷云 发表于 2015-5-11 21:30:04

在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、

简单生活 发表于 2015-6-18 09:04:53

在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。

老尸 发表于 2015-6-18 11:38:19

当然这种网站的会员费就几十块钱。

不帅 发表于 2015-7-7 21:10:03

如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
页: [1] 2
查看完整版本: PHP教程之fastm设计思绪深度分析