[整理]PHP/HTML混写的四种方式

 

PHP作为一款后端语言,为了输出给浏览器让浏览器呈现出来,无可避免的要输出HTML代码,下文介绍下我用过的三种PHP/HTML混编方法

1.单/双引号包围法

这是最初级的方法了,用法就像下面这样

 1 <?php
2 echo '
3 <!DOCTYPE html>
4 <html>
5 <head>
6 <title> </title>
7 </head>
8 <body>
9 <span>测试页面</span>
10 </body>
11 </html>
12 ';
13 ?>

这样是最简单的一种方法了,直接用单引号包装上就行了

至于双引号和单引号的区别,就在于前者解析引号内的变量,而后者不解析引号内的变量,参看下面的例子

1 <?php
2 $Content='Hello!';
3 echo "$Content";
4 echo '<br>';
5 echo '$Content';
6 ?>

输出

1 Hello!
2 $Content

由此可见,用双引号包围的字符串中的变量名自动解析为了变量值,而用单引号包围则依然显示变量名

这样书写的缺点有两点

1.如果输出内容中包含单/双引号将极难处理,因为PHP无法判断这个引号是属于程序的还是输出内容的,所以会报错

2.这样书写一些现代文本编辑器(如SublimeText)将无法对引号包围的输出的内容进行语法着色,如果出现一些格式问题将极难发现。图中为SublimeText3的一张截图,上面的是正常的着色,下面则是用引号包围的着色

2.使用HEREDOC/NOWDOC

HEREDOC和NOWDOC是PHP5.3开始支持的一种新特性,它允许在程序中使用一种自定义的标志符来包围文本,而HEREDOC和NOWDOC的关系就类似于双引号包围和单引号包围一样,前者解析区块内的变量,而后者不解析区块内的变量

下面介绍HEREDOC和NOWDOC的用法

 1 <?php
2 $Content='Hello!';
3
4 //下面写出了一个HEREDOC,其中标识LABEL可以自定义为任何字符串,但要保证开头的标识和结尾的标识一样
5 echo <<<LABEL
6 $Content
7 LABEL;
8 //结尾的方法:另起一行,打上LABEL。注意结尾的标识前面和后面不要插入任何字符,空格也不行
9
10 echo '<br>';//为了演示方便换行
11
12 //NOWDOC和HEREDOC的书写方式差别在于NOWDOC的标识符需要用单引号包围
13 echo <<<'LABEL'
14 $Content
15 LABEL;
16 //其他无异
17
18
19 ?>

也可以参考PHP.net上的关于这两个的wiki:https://wiki.php.net/rfc/heredoc-with-double-quotes

用HEREDOC/NOWDOC书写极好的解决了包围引号的问题,但依然没有解决语法着色失效的问题

3.HTML中嵌入PHP程序块(推荐)

这是一种非常合适的办法,并且这种方法广泛用在了诸如WordPress模板等场合中。书写起来也较为方便,直接在需要输出的地方写上相关的代码就行了,就像下面这样

 1 <?php
2
3 //首先在这里写好相关的调用代码
4 function OutputTitle(){
5 echo 'TestPage';
6 }
7 function OutputContent(){
8 echo 'Hello!';
9 }
10
11 //然后再下面调用相关函数就可以了
12 ?>
13
14 <!DOCTYPE html>
15 <html>
16 <head>
17 <title><?php OutputTitle(); ?></title>
18 </head>
19 <body>
20 <span><?php OutputContent(); ?></span>
21 </body>
22 </html>

我认为这种方法是在这三种方法中最好的,但是这样做的缺点是如果这样的代码块一多了就会严重影响程序阅读。

4.使用前端模板引擎

由于前端的重要性在整个Web开发中日益上升,现在前/后端工程师逐渐在分离成两个职业,所以说为了确保前/后端工程师能够相互配合,使前端开发和后端开发出来的东西对接更完美,逐渐催生出了一系列前端模板引擎,比如Smarty。使用Smarty书写的实现代码可读性非常的高,这使前/后端的分离也更加的高效和便捷。有兴趣的同学可以去搜索了解

最新文章

  1. 纯C#实现屏幕指定区域截屏
  2. JS checkbox 全选 全不选
  3. 帆软FineReport如何使用程序数据集
  4. POJ1769 Minimizing maximizer(DP + 线段树)
  5. JSP 连接MySQL 5.1
  6. 【T电商2】ftp服务器搭建
  7. 更改linux文件夹的默认颜色
  8. ytu 1980:小鼠迷宫问题(DFS 深度优先搜索)
  9. hdu 5067 Harry And Dig Machine (状态压缩dp)
  10. 【响应式Web设计实践 #BOOK#】
  11. Kettle之数据抽取、转换、装载
  12. 邀请朋友富途开户赢iPhone6的史上最强攻略
  13. Solr 教程
  14. XML配置文件的命名空间与Spring配置文件中的头
  15. 转:JAVA常见错误处理方法 和 JVM内存结构
  16. Kafka的特点及使用场景
  17. EZ 2018 03 30 NOIP2018 模拟赛(六)
  18. Nuxt 开发环境不支持ip访问?
  19. 怎样解决Java Web项目更改项目名后报错
  20. python学习之----用虚拟环境保存库文件

热门文章

  1. Java反射学习-3 - 反射获取属性,方法,构造器
  2. spark复习笔记(2)
  3. React与Typescript整合
  4. There is no Action mapped for namespace [/] and action name [TestAction] ass
  5. 微信 ios img图片不显示问题
  6. POJ 2018 Best Cow Fences (二分答案构造新权值 or 斜率优化)
  7. 使用django 的cache设置token的有效期
  8. matplotlib--直线和点
  9. php7 mysqli_query返回1 , 但是更新失败
  10. redis集群报错:(error) CLUSTERDOWN The cluster is down