就性能而言,更好的是什么。使用PHP来回显所有的HTML输出,这样我就可以使用各种工作代码和变量,或者在整个文档中定期将HTML转义为php。
我知道可能存在一些可读性问题,但我并不担心。
全部谢谢!
示例1
echo '<html>',
'<body>',
'The content of the ',$container,' element is displayed in your ', $other_container,
'</body>',
'</html>';
OR
<html>
<body>
The content of the <?php echo $container; ?> element is displayed in your <?php echo $other_container; ?>
</body>
</html>
答案 0 :(得分:33)
这就是你发现最具可读性的一切。当然,这会因每种情况而异。如果你正在做整个页面,并且有大部分没有任何PHP,那么我将打破PHP并编写纯HTML,而如果有一个部分有很多PHP变量,我会用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
);
?>
答案 1 :(得分:31)
最容易阅读的内容。
与您遇到的几乎任何其他问题相比,性能差异可以忽略不计。绝对可读性是第一个问题。
答案 2 :(得分:22)
让我们引用the manual:
这里给出的例子是人为的, 当然,但输出大 阻止的文本,退出PHP 解析模式通常更多 比发送所有文本更有效率 通过echo()或print()。
但是,请听取其他人的意见,避免这种微观优化,并选择更易读的。
我可以提出第三种解决方案吗?你听说过模板引擎吗?它们可以帮助您在代码和表示之间创建清晰的分隔,这通常可以使代码更清晰,更易于维护。一种流行的这种模板引擎是例如smarty,但有数百种不同的优势。
答案 3 :(得分:8)
这与您的应用程序的整体速度无关。
话虽如此,我知道你说你不在乎,但请使用第二个,因为它大约一百万次阅读更容易。可读性巨大。
答案 4 :(得分:8)
我不知道这个的性能,但在PHP中你也可以使用我认为被称为“Heredoc”的东西,我认为这有助于在这种输出中提供可读性。
Nickf的例子:
<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;
?>
我相信最终的可读性是一个主观的东西,所以你的里程可能会有所不同!
露丝
答案 5 :(得分:5)
它属于微优化领域。您的大部分时间都是初始化PHP引擎开始工作。
因此,除非您订购了数万行(甚至更多),否则您不应该关注它。
要添加,我做了一个百万行的小测试,我用php打印它们,我用php调用一个c程序做同样的事情,差别很小。
更多信息。
第二个例子中发生的事情是你正在“打开/关闭”PHP,它不是正在发生的事情,但是这个例子很合适。
你应该更担心的是,代码会有很多逻辑吗?我是否要将该字符串拆分成更多的字符串,甚至将它放在不同的地方?这是MVC应用程序的视图吗?
对于1和2,它们可能是两种方法之间的折腾。但是对于3,我会因为这些原因选择方法2。
MVC Web应用程序中的视图主要是html / css。所以我想看到格式正确,我想在我的编辑器中看到html着色。所以这是一个加号。
答案 6 :(得分:3)
在表现方面......这并不重要。代码的可读性是最重要的,性能差异的一小部分不会改变任何东西。
原始HTML版本通常是最容易阅读的(并且可能具有最佳性能以及它的价值 - 但它的价值在于:什么都没有)。这并不奇怪:PHP是一种HTML模板语言,整个 point 在语言语法级别交错HTML。
查看nickf的代码,了解如何保持其可读性。缩进很重要!在每个PHP控件结构中放置一个缩进级别,以便您可以跟踪它们。例如:
<?php if ($error) { ?>
<p> Oh no, error! </p>
<?php } ?>
最后,在输出内容时,例如你的示例中的$ container,你必须总是htmlspecialchars()它,或者你将拥有一个充满HTML注入安全漏洞的应用程序,就像其他所有PHP新手一样(甚至许多专业人士)开发人员,遗憾的是)。这与您用于输出内容的方法无关。
因为htmlspecialchars是一个非常烦人的长函数名,所以你可以尝试定义自己的快捷函数:
<?php
function h($s) {
echo(htmlspecialchars($s, ENT_QUOTES));
}
?>
<ul>
<?php foreach ($things as $thing) { ?>
<li> <?php h($thing['name']) ?> </li>
<?php } ?>
</ul>
答案 7 :(得分:3)
代码就像下一个接管项目的程序员是连环杀手一样。换句话说,请使用您提到的第二个选项。
答案 8 :(得分:3)
这应该被视为可读性和维护问题,而不是性能问题。
因此,选项2有几个具体的优点:
答案 9 :(得分:2)
对于小位,我只是将它全部保存在PHP字符串中,例如循环遍历数组以生成列表。但是对于更大堆的标记,我将其保留在PHP之外,并在必要时插入PHP。
这主要是因为我更喜欢优化可维护性。这不仅仅是因为当html应用了适当的语法高亮显示时,它会更快地看到正在发生的事情,但是因为它也会因为不太可能发生的代码读取错误而导致错误。
真的没有最好的办法。我只是试着与上面描述的内容保持一致,并保持睁大眼睛,以防其他方式可能是更好的处理方式。
答案 10 :(得分:2)
我更喜欢使用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文本的行为就像一个双引号字符串,没有 双引号。这意味着heredoc中的引号不需要 转义,但仍可使用上面列出的转义码。 变量被扩展,但必须同样谨慎 用字符串表示heredoc中的复杂变量。
答案 11 :(得分:1)
后者更具可读性。它也更容易编辑(例如,您不必在HTML中转义引号)。并且它可以毫无困难地保留空白,这可能是首选,尤其是出于调试目的。
我几乎希望PHP能够print()
和echo()
自动转换HTML字符,以便人们停止使用它们来生成HTML。
答案 12 :(得分:1)
你应该认真考虑永远不要将PHP放在HTML中。您正在将逻辑与视图混合,这会使项目变得混乱。
正如其他人所说,如果输出为html,请使用<?php echo $whatever; ?>
如果必须输出大量信息,请查看输出缓冲。