将HTML转换为PHP或使用Echo? 哪个更好?
在性能方面,什么会更好。 使用PHP来回应所有的HTML输出,所以我可以胡椒与工作代码和variables的各种位或在整个文件中定期转换HTML到PHP。
我知道可能有一些可读性问题,但我不担心这一点。
谢谢大家!
例1
echo '<html>', '<body>', 'The content of the ',$container,' element is displayed in your ', $other_container, '</body>', '</html>';
要么
<html> <body> The content of the <?php echo $container; ?> element is displayed in your <?php echo $other_container; ?> </body> </html>
这一切都是你发现最可读的。 当然,这会随着每种情况而变化。 如果你正在做整个页面,并且有很大的部分没有任何PHP,那么我会跳出PHP,只是写纯HTML,而如果有一个部分有很多的PHPvariables,我会用PHP来完成。
例如:
<table> <tr> <td colspan="<?php echo $numCols; ?>"> <?php echo $a; ?>, <?php echo $b; ?>, and <?php echo $c?> </td> </tr> </table>
与:
<?php echo "<table>" . "<tr>" . "<td colspan=\"" . $numCols . "\">" . $a . ", " . $b . " and " . $c . "</td>" . "</tr>" . "</table>" ; ?>
要么
<?php echo "<table> <tr> <td colspan='{$numCols}'> {$a}, {$b}, and {$c} </td> </tr> </table>"; ?>
也别忘了printf
<?php printf("<table>" . "<tr>" . "<td colspan=\"%d\">%s, %s and %s</td>" . "</tr>" . "</table>" , $numCols , $a , $b , $c ); ?>
无论哪个最容易阅读。
与几乎所有其他您遇到的问题相比,性能差异可以忽略不计。 当然,可读性是第一个问题。
我们引用手册 :
这里给出的例子当然是人为devise的,但是对于输出大块文本来说,剔除PHPparsing模式通常比通过echo()或print()发送所有文本效率更高。
但请倾听其他人的意见,避免这种微观优化,并select一个更清晰。
我可以提出第三个解决scheme吗? 你听说过模板引擎吗? 它们帮助您在代码和表示之间创build一个清晰的分隔,这通常会导致更简单的代码更易于维护。 一个stream行的这样的模板引擎是如smarty ,但有数百个不同的优势。
这与你的应用程序的总体速度是无关紧要的。
这就是说,我知道你说你不在乎,但请使用第二个,因为它是大约一百万次更容易阅读。 而可读性是巨大的 。
我不知道这个的性能,但是在PHP中,你也可以使用我认为被称为“Heredoc”的东西,这在我看来有助于这种输出的可读性。
尼克的例子:
<table> <tr> <td colspan="<?php echo $numCols; ?>"> <?php echo $a; ?>, <?php echo $b; ?>, and <?php echo $c?> </td> </tr> </table>
变为:
<?php echo <<<EOT <table> <tr> <td colspan="$numCols"> $a , $b, and $c </td> </tr> </table> EOT; ?>
我相信最终的可读性是一个主观的东西,所以你的里程可能会有所不同!
怜悯
它属于微观优化领域。 你的时间最大的部分是初始化PHP引擎开始工作。
所以除非你有几万行(甚至更多)的订单,否则你不应该关心它。
要添加,我做了一百万行的一个小testing,我用PHP来打印它们,并在哪里我用PHP来调用ac程序,做了同样的事情,差异是微不足道的。
多一点信息。
在第二个例子中发生的事情是,你正在“打开/closures”PHP,它并不是正在发生的事情,但是对于这个例子来说,它是合适的。
你应该更担心的是,代码将围绕它有很多逻辑? 我要把这个string分成甚至更多的string,甚至把它放在不同的地方? 这是一个MVC应用程序的视图?
对于1和2,这可能是两种方法之间的折腾。 但是对于3我会用方法2去这些原因。
MVC Web应用程序中的视图主要是html / css。 所以我想看到格式正确,我想在我的编辑器中看到HTML着色。 所以这是一个加号。
在performance方面……这并不重要。 代码的可读性是很重要的,性能差异的百分之一小部分不会改变任何东西。
原始的HTML版本通常是最容易阅读的(也许它的性能也是最值得的 – 但是它的价值是什么:没有)。 这并不奇怪:PHP是一种HTML模板语言,整个过程就是在语言语法级别交织HTML。
看看nickf的代码,看看如何保持它的可读性。 缩进很重要! 在每个PHP控制结构中放置一个缩进级别,以便跟踪它们。 例如。:
<?php if ($error) { ?> <p> Oh no, error! </p> <?php } ?>
最后,在输出内容的时候,例如$ container,你必须总是使用htmlspecialchars(),否则就像其他PHP新手)。 无论您使用哪种方法输出内容,这都很重要。
因为htmlspecialchars是一个相当烦人的长函数名称,你可以尝试定义你自己的快捷方式function:
<?php function h($s) { echo(htmlspecialchars($s, ENT_QUOTES)); } ?> <ul> <?php foreach ($things as $thing) { ?> <li> <?php h($thing['name']) ?> </li> <?php } ?> </ul>
就好像下一个接pipe项目的程序员是一个连环杀手。 换句话说,使用你提到的第二个选项。
这应该被视为更多的可读性和维护问题比性能问题。
因此,选项2有一些具体的优点:
- 代码着色。 使用选项1,所有内容都被作为回显语句着色,这使得阅读HTML变得更加困难。
- 智能感知 – 对于许多IDE来说,PHP echo语句中的HTML不会涉及智能感知,因此您将手动input所有HTML。
对于小部分,我只是把它全部保存在PHPstring中,就像在循环数组中生成一个列表一样。 但是对于大量的标记,我将它保留在PHP之外,并在需要时放入PHP中。
这主要是因为我更喜欢优化可维护性。 不仅仅是因为当html有适当的语法高亮显示时,看看发生了什么事情会更快,而是因为它也会导致错误读取代码的可能性降低。
真的没有最好的办法。 我只是试图保持与上面所描述的一致,并且保持睁大眼睛来处理可能以另一种方式处理它的更好的方式。
我更喜欢使用PHP的heredoc函数,这种方式我不需要转义任何字符,例如:
<?php $title = "heredoc is cool!!!"; $mySite = "http://www.php.net"; echo <<<LOL <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title> $title </title> <link rel="shortcut icon" href="$mySite/favicon.ico"> <link rel="search" type="application/opensearchdescription+xml" href="$mySite/phpnetimprovedsearch.src" title="Add PHP.net search"> <link rel="alternate" type="application/atom+xml" href="$mySite/releases/feed.php" title="PHP Release feed"> <link rel="alternate" type="application/atom+xml" href="$mySite/feed.atom" title="PHP: Hypertext Preprocessor"> <link rel="canonical" href="$mySite/manual/en/language.types.string.php"> <link rel="shorturl" href="$mySite/types.string"> <link rel="contents" href="$mySite/manual/en/index.php"> <link rel="index" href="$mySite/manual/en/language.types.php"> <link rel="prev" href="$mySite/manual/en/language.types.float.php"> <link rel="next" href="$mySite/manual/en/language.types.array.php"> LOL; ?>
注意:
Heredoc文本的行为就像一个双引号string,没有双引号。 这意味着heredoc中的引号不需要被转义,但是上面列出的转义码仍然可以使用。 variables被扩展了,但是当像在string中那样在heredoc里面expression复杂的variables的时候也必须同样小心。
后者更可读。 这也更容易编辑(例如,您不必在HTML中引号)。 而且它保留了空白,没有任何麻烦,这可能是首选,尤其是出于debugging目的。
我几乎希望PHP会启用print()
和echo()
来自动转换HTML字符,以便人们不再使用它们来生成HTML。
你应该认真考虑不要把PHP放在HTML里面。 你将逻辑与视图混合在一起,使项目变得混乱。
正如其他人所说的,如果你输出到html,使用<?php echo $whatever; ?>
<?php echo $whatever; ?>
如果你不得不输出大量的信息看看输出缓冲。