<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>浮山狼de博客 &#187; 模板</title>
	<atom:link href="https://www.fushanlang.com/tag/templates/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.fushanlang.com</link>
	<description>next station - 下一站，活在当下，且行且思</description>
	<lastBuildDate>Sat, 29 Nov 2014 15:14:11 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.2.5</generator>
	<item>
		<title>php模板实现</title>
		<link>https://www.fushanlang.com/php%e6%a8%a1%e6%9d%bf%e5%ae%9e%e7%8e%b0-119/</link>
		<comments>https://www.fushanlang.com/php%e6%a8%a1%e6%9d%bf%e5%ae%9e%e7%8e%b0-119/#comments</comments>
		<pubDate>Fri, 06 Aug 2010 06:23:51 +0000</pubDate>
		<dc:creator><![CDATA[fushanlang]]></dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[php模板]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[模板]]></category>

		<guid isPermaLink="false">http://www.fushanlang.com/blog/?p=119</guid>
		<description><![CDATA[<p>         php开发中常用的模板有smarty, zend framework自身也有一套模板。实际上除非不得不使用它们，否则你应该很快就意识到，使用起来并不怎么方便。smarty需要引入库文件，学习smarty模板语法，虽然和php相似，却又不尽相同，增加了学习成本，使用起来还要config一下。要想使用ZendFramework 中的模板，肯定得使用ZF库不可，已使用ZF库，开发模式便很容易被限制在ZF下，所以也不是很灵活。</p> <p>       先说一说为什么要使用模板技术，实际开发中所谓模板，不过是一段特殊的静态代码与动态变量的结合。所以调用模板函数时最常用的两个方法是： (1) $tplObject-&#62;assign($key,$value)  &#8212; 模板变量赋值。(2)$tplObject-&#62;fetch($template_file) &#8212; 将模板对象与某一个模板文件结合输出结果。 有人说，php中的模板技术是为了“要让美工和程序员的工作分开，要让代码层和表现层分开。”，愿望是好的，但实际上我们使用的任意一款模板库的模板文件，美工都无法直接使用，很难做到所谓的”程序员和美工分开“。 而”代码和表现分开“更像是纯原生的字符串模板一样，例如”{$name} is a good guy! &#60;br/&#62;&#60;h2&#62;{$name}&#60;/h2&#62; is so beautiful!“ 中只需要替换name变量，就可以达到所谓的”代码表现分离“。实际上这用纯原生模板，功能有限。</p> <p>     这也就意味着，模板文件中的变量并不只是字符串替换这么简单，还应该允许其他多种运算。那么模板类库是怎么解决这个问题的呢？smarty里采用了类php语法的模板语法，例如{foreach}{/foreach},{if}{else}{/if}&#8230;{php} {php}等等,ZendFramework里的view倒是没有采用增添语法的方式，采用原生php的方式。此时我们才想到，php代码本身就是模板的最合适实现，不需要再搞出其他模板来。于是我们可以有一个简单的模板实现，先举一个简单的例子：</p> /**** * 简易的模板类 * 两个常用方法 * assign($key,$value)---添加模板变量，$key是模板文件中的变量名称。 * fetch($inc_file_path)--与模板文件一块儿解析返回解析后的字符串。 */ class IncFile { private $__vars = array ();//模板变量hash数组 public function __construct() { } /*** * 增加模板变量 * @param <span style="color:#777"> . . . &#8594; Read More: <a href="https://www.fushanlang.com/php%e6%a8%a1%e6%9d%bf%e5%ae%9e%e7%8e%b0-119/">php模板实现</a></span>]]></description>
				<content:encoded><![CDATA[<p>         php开发中常用的模板有smarty, zend framework自身也有一套模板。实际上除非不得不使用它们，否则你应该很快就意识到，使用起来并不怎么方便。smarty需要引入库文件，学习smarty模板语法，虽然和php相似，却又不尽相同，增加了学习成本，使用起来还要config一下。要想使用ZendFramework 中的模板，肯定得使用ZF库不可，已使用ZF库，开发模式便很容易被限制在ZF下，所以也不是很灵活。</p>
<p>       先说一说为什么要使用模板技术，实际开发中所谓模板，不过是一段特殊的静态代码与动态变量的结合。所以调用模板函数时最常用的两个方法是：<br />
(1) $tplObject-&gt;assign($key,$value)  &#8212; 模板变量赋值。(2)$tplObject-&gt;fetch($template_file) &#8212; 将模板对象与某一个模板文件结合输出结果。<span id="more-119"></span><br />
有人说，php中的模板技术是为了“要让美工和程序员的工作分开，要让代码层和表现层分开。”，愿望是好的，但实际上我们使用的任意一款模板库的模板文件，美工都无法直接使用，很难做到所谓的”程序员和美工分开“。 而”代码和表现分开“更像是纯原生的字符串模板一样，例如”{$name} is a good guy! &lt;br/&gt;&lt;h2&gt;{$name}&lt;/h2&gt; is so beautiful!“ 中只需要替换name变量，就可以达到所谓的”代码表现分离“。实际上这用纯原生模板，功能有限。</p>
<p>     这也就意味着，模板文件中的变量并不只是字符串替换这么简单，还应该允许其他多种运算。那么模板类库是怎么解决这个问题的呢？smarty里采用了类php语法的模板语法，例如{foreach}{/foreach},{if}{else}{/if}&#8230;{php} {php}等等,ZendFramework里的view倒是没有采用增添语法的方式，采用原生php的方式。此时我们才想到，php代码本身就是模板的最合适实现，不需要再搞出其他模板来。于是我们可以有一个简单的模板实现，先举一个简单的例子：</p>
<pre>/****
 * 简易的模板类
 * 两个常用方法
 * assign($key,$value)---添加模板变量，$key是模板文件中的变量名称。
 * fetch($inc_file_path)--与模板文件一块儿解析返回解析后的字符串。
 */
class IncFile {
	private $__vars = array ();//模板变量hash数组

	public function __construct() {
	}

	/***
	 * 增加模板变量
	 * @param String $key
	 * @param Object|Value  $value。
	 */
	public function assign($key, $value) {
		$this-&gt;__vars[$key] = $value;
	}

	public function fetch($inc_path) {
		$result = "";
		ob_start();//打开缓冲区，准备输出模板结果
		foreach ($this-&gt;__vars as $k =&gt; &amp; $v) {
			$$k = $v;//这里把hash数组中的元素，以局部变量的方式定义声明一下，这样才能用到模板文件里。
                                     //例如模板中&lt;?php echo $user.name?&gt;,hash数组中是$__vars['user']={name=&gt;'Tom'}
		}
		include ($inc_path);//将模板文件包含进来，执行
		$result = ob_get_contents();//返回缓冲区内容
		ob_get_clean();//清空缓冲区
		return $result;
	}
}
这便是我最近经常使用的一个模板函数，使用起来很是轻巧。</pre>
]]></content:encoded>
			<wfw:commentRss>https://www.fushanlang.com/php%e6%a8%a1%e6%9d%bf%e5%ae%9e%e7%8e%b0-119/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
