便宜的php模板与vprintf?

use*_*391 2 php templates function templating

好的,所以printf/sprint/vprintf都接受某种类型说明符语法%[num] [type].(http://us2.php.net/sprintf参见示例3和4)其中num是该类型的索引.

示例:vprintf('Number%1 $ d string%2 $ s.String%2 $ s,number%1 $ d',array(1,"no"));

是的,它是有限的......你需要维护索引.但它本土的语言和(我认为)快速.

我只想想一下这对于第二阶段是多么有用,如下所示:http://www.techfounder.net/2008/11/18/oo-php-templating/.

(如果有人知道printf/vprintf的速度,将不胜感激)

我正在谈论的完整例子:

frontpage.php:

<html>

<head>

<title> %1$s </title>

</head>

<body>

Hello %2$s! You have reached page: %1$s!

</body>

</html>

whatever.php:

ob_start();

include frontpage.php;

$ob_output = ob_get_clean();

vprintf($ob_output,"Page Title","Bob");

hbw*_*hbw 6

如果您想要廉价的PHP模板,请使用带有PHP表达式块的单独文件.使用printf样式格式字符串可以制作模板系统,但是我可以通过这种方法看到两个主要问题:速度和可读性.这些printf函数适用于较短的字符串,虽然我手边没有任何统计信息,但我认为运行一个sprintf()或一个vprintf()代表页面主体的巨大字符串比使用PHP表达式块慢一些是安全的.在一个文件中.

这导致了下一个问题:可读性.比较这两个HTML模板:

<html>
<head>
   <title>%s</title>
</head>
<body>
<div id="main">
    <h1>%s</h1>
    <p>%s</p>
</div>
<div id="other">
    <p>%s</p>
</div>
<p id="footer">
    %s. Took %.2f seconds to generate.
</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

<html>
<head>
   <title><?= $title ?></title>
</head>
<body>
<div id="main">
    <h1><?= $header ?></h1>
    <p><?= $body_text ?></p>
</div>
<div id="other">
    <p><?= $misc_info ?></p>
</div>
<p id="footer">
    <?= $copyright ?>. Took <?= $load_time ?> seconds to generate.
</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

或者,假设我已经决定使用带索引参数的格式字符串.说,像这样:

<h1>%1$s</h1>
<p>%2$s</p>
<span id="blah">%3$s</p>
<p>%4$s</p>
<p>%5$s</p>
Run Code Online (Sandbox Code Playgroud)

现在,如果我想切换订购怎么办?

<h1>%1$s</h1>
<p>%3$s</p>
<span id="blah">%5$s</p>
<p>%4$s</p>
<p>%2$s</p>
Run Code Online (Sandbox Code Playgroud)

这些显然是人为的,但想想printf从长远来看如何维护模板.

因此,一般而言,如果您想要快速而肮脏的PHP模板,请使用包含PHP表达式块的模板文件.这些printf函数在处理较小的字符串格式化任务方面要好得多.