Loading... # [php中heredoc模板引擎方法小结](https://blog.p2hp.com/archives/809) [Heredoc](https://www.runoob.com/php/php-eof-heredoc.html) 技术,也叫字符串输出技术,在正规的PHP文档中和技术书籍中一般没有详细讲述,只是提到了这是一种Perl风格的字符串输出技术。之前在研究PW模板中经常发现,但一直不明白原理,其实这就是一种大量字符串输出的技术,这种技术不仅能大量输出字符串,而且还能实现了界面与代码的准分离,phpwind模板就是巧妙了使用这种技术,一个典型的例子! 举个简单的例子: echo EOT<<<; <span id="name" class="use">My name is Tom</span> EOT; 这样就输出一段span 可以看出里面照样可以使用双引号。也就是说在EOT<<<与EOT之间字符串可以按照HTML格式写,不需要转义,而且易于阅读。 既然有这么方便的东西,不是就可以当作模板吗?看下下面这个模板页面name.html <!--<?php $name = 'Tom'; print <<<EOT --> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>Untitled Document</title> </head> <body> Hello,$name! </body> </html> <!--<?php EOT; ?>--> 如果采用php页面include ‘name.html’;结果输出Hello,Tom; 而如果直接访问HTML;输出Hello,说明PHP部分被注释了。 但是使用heredoc要注意几点: 1.以<<<EOT开始标记开始,开始标记后面不能有空格,以EOT;结束标记结束,结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号。之前因为养成了良好的缩进情况,一直无法正常解析,百思不得其解。。开始标记和开始标记相同,比如常用大写的EOT、EOD、EOF来表示,但是不只限于那几个,只要保证开始标记和结束标记不在正文中出现即可。 2.位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以。在heredoc中,变量不需要用连接符.或,来拼接,如果是数组需使用{}:如’Hi’$name, {$arrSet['name']}。 ------------------------------------------- Heredoc技术,在正规的PHP文档中和技术书籍中一般没有详细讲述,只是提到了这是一种Perl风格的字符串输出技术。但是现在的一些论坛程序,和部分文章系统,都巧妙的使用heredoc技术,来部分的实现了界面与代码的准分离,phpwind就是一个典型的例子。 在PHP的文档中,只是提到了echo可以使用如下命令输出多行字符串(而且其中的变量被自动替换): PHP如下: echo <<<END This uses the "here document" syntax to output multiple lines with $variable interpolation. Note that the here document terminator must appear on a line with just a semicolon. no extra whitespace! END; 上面的END结束符可以自己规定,在Phpwind,使用了“EOT”来结束。但是需要注意的是,这个END必须是在一行的开头才能有效,这其实是Heredoc技术的一个局限性(因为heredoc可以自定义结束符,所以引入了这个问题),在下面会提到。 phpwind的模板文件一般存放在templatewind目录下面,在BBS目录中,使用require语句包含这个模板文件。其实这个模板文件是作为对应的PHP文件的一部分执行的,所以就不需要像PHPLib Template那样需要进行模板解析,然后再执行的过程。 为了让heredoc的内容能被DreamWeaver这样的编辑器正确识别,以实现“所见即所得的”的网页设计,需要在heredoc中增加注释,示例文件如下: PHP代码如下: <!-- <?php print <<<EOT --> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>Untitled Document</title> </head> <body> <!-- $name = '水木'; print <<<EOT --> Hello,$name! <!-- EOT print <<<EOT --> </body> </html> <!-- EOT; ?> --> 这样的模板文件,其实就是一个标准的,可以执行的PHP文件。但是,这样的PHP文件,其HTML样式在DreamWeaver中可以正确的显示出来,所有的PHP代码会被看做HTML注释,而且在输出的时候,不会输出出来。比如,上面的文件在DreamWeaver中,被显示成: PHP代码如下: Hello,$name! 这样,在设计页面的时候,我们就可以借助DW的可视化界面,进行一些界面的修改,美化等工作。尽管没有实现完全的代码和HTML的分离,但至少提供了一种辅助性的设计手段。 最后修改:2023 年 08 月 07 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏