看这个:
<?php
echo "Hello World";
?>
<br />
<?php
echo "Welcome";
?>
现在看一下:
<?php
echo "Hello World";
echo "<br />";
echo "Welcome";
?>
(至少从性能的角度来看)以上示例中的哪一个更好?
我知道这些示例很简单,但是我想从一开始就遵循良好的实践习惯,因此,当我有越来越多的台词时,它们不会影响性能或其他负面影响。
看这个:
<?php
echo "Hello World";
?>
<br />
<?php
echo "Welcome";
?>
现在看一下:
<?php
echo "Hello World";
echo "<br />";
echo "Welcome";
?>
(至少从性能的角度来看)以上示例中的哪一个更好?
我知道这些示例很简单,但是我想从一开始就遵循良好的实践习惯,因此,当我有越来越多的台词时,它们不会影响性能或其他负面影响。
Answers:
正如评论所指出的,它应该由模板来完成。但是,如果只有两种选择是可能的。情况1会更好。这与android通过xml扩大布局或以编程方式制作UI的概念相同。您<br/>
是html的静态内容,服务器将要做的只是显示它。但是,如果您使用php来执行它,它将使用您的服务器资源并进行计算。
这是应该做的事情:index.php:
<?php
include 'header.html';
...
include 'footer.html';
?>
header.html和footer.html是模板。
要直接回答您的问题:切勿回显静态文本或HTML。将其保留在PHP之外。
<?php echo "<p>Hello World</p>"; // Alway wrong. ?>
<p>Hello World</p> <!-- Does the same thing, faster, and is more readable. -->
如果您要做的只是传递静态文本或静态html,转义到PHP就是浪费。里面的所有代码<?php ?>
都发送到PHP进行解释。这意味着如果无缘无故将大量静态文本传递给PHP,则您的网站速度会变慢,并且会浪费电力。(有时是有原因的。)
最佳实践是让您的逻辑和专心致志地在没有任何HTML(只有PHP)的文件中工作。
我喜欢这样做的方法是使用MVC框架。我在模型和控制器中有纯PHP,在视图中有HTML和PHP的混合。您不需要MVC框架。您可以将HTML的混合粘贴在模板文件中,然后将其包含在纯PHP文件中。
一旦在纯PHP文件中创建了变量(其中不包含HTML),您就可以使用HTML将其传递给文件。在那儿,只有在那儿,将HTML和PHP混合使用才可以。但是,这很重要,但是在处理具有HTML的文件时,请将PHP保持在最低限度。
幸运的是,PHP附带了友好的工具,使PHP与html混合使用时更易于阅读。
替代语法
最佳实践是在编写纯PHP时使用常规PHP语法,而在混合PHP和HTML时使用替代语法。
在没有任何HTML的常规PHP文件中:
if ($something) {
do_something(); // do_something() shouldn't echo or print.
}
这对于纯PHP来说很漂亮,但是从HTML转义时并不理想。特别是,当右括号出现在大量HTML中时,通常很难理解。
根据您的问题,您可能会在混合HTML和PHP的文件中看到以下内容:
<?php
if ($something) {
echo '<p>Hello World.</p>';
}
?>
由于上述原因,我们希望不要将HTML发送给PHP。我们这样做是这样的:
<?php if ($something) { ?>
<p>Hello World.</p>
<?php } ?>
我们从PHP标签中提取了HTML,这是一个改进。但是我们可以走得更远。
请注意,右括号的内容不详?我们不知道它是关闭循环还是if语句。在上面的示例中,这似乎是微不足道的,但是在循环/结束循环中,如果在if / endif内部通常包含数十行HTML。
最佳实践是在混合PHP和HTML的文件中,使用替代语法,该语法省略了大括号({ }
)和右括号():
<?php if ($something): ?>
<p>Hello world.</p>
<?php endif; ?>
除了新语法(:
和,endif;
而不是{
and }
)的语义外,您还应该注意两点:
<?php ?>
标记之外,因此不会被解释。由于上述原因,这很好。<?php } ?>
)的php信息要多得多,它们会关闭很难找到它们在哪里打开的东西(因为它们与大量混乱的HTML混合在一起)。再次,设想一个带有循环和if语句的大HTML文件。指定您要关闭的内容可以澄清很多。相同的模板友好语法也可以用于循环:
<?php foreach ($things as $thing): ?>
<li><?php echo $thing; ?></li>
<?php endforeach; ?>
短标签
PHP提供的另一个很棒的工具,即短标签,是将PHP和HTML混合在一起时只想使用的工具。您可能必须在php.ini文件中打开短标签。一旦打开,短标签将使所有内容更具可读性。
如果没有短标签,则必须编写,<?php echo $something; ?>
但是如果有短标签,则可以编写<?=$something?>
,其结果将完全相同。
当结合短标签和替代PHP语法时,您实际上可以编写一些优雅的HTML文件,其中包括PHP元素。以我们的最后一个循环示例(循环中的一部分)为例,短标签使我们可以减少:
<li><?php echo $thing; ?></li>
至
<li><?=$thing?></li>
更具可读性。
我们可以走得更远吗?是。使用各种模板系统,您可以执行以下操作:
<li>{thing}</li>
这是惊人的可读性。但是,模板系统远远超出了原始问题的范围(无论如何我之前还是提到过)。
short_open_tag
指令将始终处于打开状态。PHP 5.4 <?=$thing?>
始终保持可用状态,即使short_open_tag
已禁用也是如此。另外,short_open_tag
默认设置为off以防止与XML冲突。
<?php $foo='ABC'; echo '<div>', $foo, '</div>'
并<?php $foo='ABC'; ?><div><?=$foo?></div>
导致完全相同的操作码,即它们是相同的。
<li>{$thing}</li>
像显示的那样说,与双引号相比,它的优点是您不必在其内部转义双引号。您还可以分配heredoc或将其传递给函数,因此,如果在块中使用它,则它比php / html更加干净。array_reduce($items, function($s, $item) { $name = htmlspecialchars($item['name']); return $s . <<< EOT <li>{$name}: {$item['price']}</li> EOT; })
您正在学习,忘记了PHP页面的性能。相反,请选择最容易阅读的方式。
查看您的两个示例,第二个绝对是最容易阅读的,尽管我认为这是因为您使用了间距。您说您希望从一开始就养成良好的习惯,我认为通过良好地阅读代码可以更好地花费时间。这可能意味着多次重写一个节,直到您对它满意为止。
如果您真的很想了解幕后知识,我将向您解释PHP页面中的静态内容会发生什么。第一件事就是将整个页面“解析”为可执行代码(就像您在<?php ?>
标记之间看到的那样)。其中的一部分是将任何静态文本转换成echo
。
所以这:
<?php echo "Hello World"; ?>
<br />
<?php echo "Welcome"; ?>
变成了类似的东西:
echo "Hello World";
echo "<br />";
echo "Welcome";
与解析相关的开销很小,但是执行结果代码没有区别。如果您使用的是PHP加速器,则解析仅进行一次,然后进行缓存,因此在第一页加载后,您不会发现性能差异。
记住:容易阅读!
echo
如果从字面上(您的语言所暗示的意思)将“静态文本”转换为,是不正确的。结果是相同的,但方法却大不相同。您所谓的“静态文本”实际上是从PHP到HTML的转义。发生这种情况时,服务器开始发送原始文本。它不会像通过那样通过PHP解析它echo
。在任何非人为情况下,对性能的影响可能很小,但是机械上的差异很重要。
在PHP中使用HTML存在一些限制。
大多数时候,您会将HTML放在外面。您可以像不使用PHP一样创建页面,然后将PHP添加到文档中您需要的区域。您可以在文档中包含多个PHP块。
在HTML内部使用PHP包含一些示例: