将HTML转换为PHP或使用Echo?哪个更好?

时间:2009-02-03 00:46:30

标签: php html performance

就性能而言,更好的是什么。使用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>

13 个答案:

答案 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有几个具体的优点:

  1. 代码着色。对于选项1,所有内容都被着色为echo语句,这使得阅读HTML变得更加困难。
  2. Intellisense - 对于许多IDE,PHP echo语句中的HTML不会引入intellisense,因此您将手动输入所有HTML。

答案 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; ?>

如果必须输出大量信息,请查看输出缓冲。