有人认为用php开发出的如smarty等模板引擎是一种倒退,因为php是一种天生的web语言,它本身的<?php ?>
标签已经能很好的满足要求。在这里我们不讨论哪一种看法更对,而是总结php如何更好的与html结合。
在探讨前,我们需要区别下在php中单引号'
和双引号“
的不同:即双引号可以包含一个变量,而单引号却不能,看代码。
$var = 'this is a variable';
echo '$var'; //$var;
echo "$var"; //this is a variable;
单/双引号包裹内容
echo '
<html>
<body>
I hope this doc do not include variable
</body>
</html>
';
$variable = "content";
echo "
<html>
<body>This doc can include some $variable</body>
</html>
";
使用sprintf、vsprintf等函数
sprintf等包含printf的函数可以输出格式化的字符串,sprintf和vsprintf函数可以将格式化后的字符串赋值给一个变量,而不是直接打印。
$content = sprintf('<html><head><title>%s</title></head></html>',"seo");
echo $content;
显然,这个函数不适合变量太多的格式化输出,因为,会连自己都忘记,变量和占位符没有明显的映射关系,只是通过顺序来对应,很难区分。
HEREDOC/NOWDOC
这是5.3之后的新特性,可以用自定义的标签包含文档。常用的标签包括:HTML,EOF,EOT,LABEL
等。
$title = "关于seo的文章";
$content = "seo的意思是搜索引擎优化……";
$str = <<<HTML
<html>
<head>
<meta charset="utf-8" />
<title>$title</title>
</head>
<body>$content</body>
</html>
HTML;//解析了变量
$str = <<<'HTML'
<html>
<head>
<meta charset="utf-8" />
<title>$title</title>
</head>
<body>$content</body>
</html>
HTML;//没有解析变量
echo $str;
在phpstorm等IDE里,能很好的解决着色问题。
在不方便使用php标签和模板引擎的情况下,以上的三种方法能很好的解决php与html混合的问题。