2

さて、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"));

はい、制限されています...そして、インデックスを維持する必要があります。しかし、それは言語にネイティブであり、(私は思うに)高速です。

次のようなものの第2段階として、これがどれほど役立つかについて考えてみたいだけです: 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>

何でも.php:

ob_start();

include frontpage.php;

$ob_output = ob_get_clean();

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

4

3 に答える 3

6

安価な PHP テンプレートが必要な場合は、PHP 式ブロックを含む個別のファイルを使用してください。スタイルのフォーマット文字列を使用してテンプレート システムを作成することは可能printfですが、このアプローチには 2 つの主な問題があります。それは、速度と読みやすさです。関数は短い文字列で使用することを目的としています。printf手元に統計はありませんが、ページ本体を表す 1 つの巨大な文字列に対して asprintf()または aを実行するとvprintf()、PHP 式ブロックを使用するよりも遅くなると言っても過言ではありません。ファイルで。

それは次の問題につながります: 可読性です。次の 2 つの 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>

<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>

または、インデックス付きの引数でフォーマット文字列を使用することにしたとしましょう。次のように言います。

<h1>%1$s</h1>
<p>%2$s</p>
<span id="blah">%3$s</p>
<p>%4$s</p>
<p>%5$s</p>

では、順序を入れ替えたい場合はどうすればよいでしょうか。

<h1>%1$s</h1>
<p>%3$s</p>
<span id="blah">%5$s</p>
<p>%4$s</p>
<p>%2$s</p>

printfこれらは明らかに不自然ですが、長期的にテンプレートを維持する方法を考えてみてください。

そのため、一般的には、簡単な PHP テンプレート作成が必要な場合は、PHP 式ブロックを含むテンプレート ファイルを使用します。printf関数は、より小さな文字列の書式設定タスクに取り組むのにはるかに優れています。

于 2009-05-08T09:10:07.813 に答える
3

私は一般的に2つのファイルを持っています:

  • ある種のコントローラー(recipes.controller.phpが/ recipes / 123に書き直されました)
  • コントローラの多くのビューの1つ(recipes.view.html)

コントローラ内ですべてのロジック/データベース作業を実行し、最後に適切なビューを含めるだけです。ビューはコントローラー内のすべての変数にアクセスできるため、$ title、$components[]などを既に作成しています。なぜ人々がそれよりも複雑にするのか、私にはよくわかりません。フォローするのはとても簡単です。

ビューファイルは基本的に次のようになります。

<html>
<head>
<title><?=$title ?></title>
</head>
etc...
于 2009-05-08T15:18:33.927 に答える
1

PHP の作成者である Rasmus Lerdorf は、次のような変数を含めることを好みます。

    <select class="f" name="cat" id="f_cat" size="1">
      <option selected>Category</option>
<?php foreach($categories as $cat) echo <<<EOB
      <option value="{$cat}">{$cat}</option>

EOB;
?>

参考までに、<<<EOBthroughEOB;ヒアドキュメントです。

出典: Rasmus Lerdorf によるフレームワークなしの PHP MVC フレームワーク

于 2009-05-08T15:19:41.723 に答える