Vprintf ile ucuz php çiftleşmiş?

3 Cevap php

Ok, so printf/sprint/vprintf all accept a certain type specifier syntax %[num][type]. (http://us2.php.net/sprintf see examples 3 and 4) Where num is the index to the type.

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

Evet, sınırlı ... Ve sen dizinleri korumak gerekir. Ama hızlı (bence) diline özgüdür var ve.

Ben sadece böyle bir şey için bir ikinci aşama dediğiniz gibi bu nasıl bir yararı olacağı konusunda bazı düşünceler istiyorum: http://www.techfounder.net/2008/11/18/oo-php-templating/.

(Ve herkes takdir printf / vprintf 's hızında biliyorsa)

Ben neden bahsettiğimi tam bir örnek:

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");

3 Cevap

Eğer ucuz PHP çiftleşmiş istiyorsanız, PHP ifade blokları ile ayrı dosyalarını kullanabilirsiniz. Bu printf-stili biçim dizeleri kullanarak bir çiftleşmiş sistem yapmak mümkündür, ama bu yaklaşım ile görebilirsiniz iki temel sorun vardır: hız ve okunabilirlik. printf fonksiyonlar kısa dizeleri üzerinde kullanılmak üzere tasarlanmıştır, ve ben taraftan herhangi bir istatistik yok, ancak ben (o sprintf() veya {[çalıştıran söylemek güvenli olduğunu düşünüyorum edilir 3)]} sayfa gövdesini temsil eden bir büyük dize sadece bir dosyada PHP ifade bloklarını kullanarak daha yavaş olacaktır.

Yani bir sonraki sayısında götürür: okunabilirliği. Bu iki HTML şablonları karşılaştırın:

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

ve

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

Ya da, en ben endeksli argümanlar ile biçim dizeleri kullanmaya karar verdi diyelim. , Böyle bir şey söyle:

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

Şimdi, ne sipariş etrafında geçmek istiyorsa?

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

Bu tabii ki yapmacık, ama uzun vadede printf şablonları korumak olacaktır nasıl düşünmek.

So, in general, if you want quick-ve-dirty PHP templating, use template files that contain PHP expression blocks. The printf functions are a lot better at tackling smaller string formatting tasks.

Ben genellikle iki dosya var:

  • Bir çeşit kontrolör (/ recipes/123 için yeniden recipes.controller.php)
  • Bir kontrolör (recipes.view.html) için pek çok kez bir

Ben sadece denetleyici içindeki mantık / veritabanı tüm iş yapmak ve daha sonra sonunda uygun görünüm içerir. Zaten $ başlık gibi şeyler var bu yüzden görünümü denetleyicisi değişkenlerin tüm erişimi olan, $ maddeleri [], vb yarattı. Ben insanların herhangi daha karmaşık yapmak neden gerçekten emin değilim. Bu takip etmek çok kolay.

Görünüm dosyası temelde sadece bu gibi görünecektir:

<html>
<head>
<title><?=$title ?></title>
</head>
etc...

Rasmus Lerdorf, PHP yaratıcısı, onun değişkenleri böyle bir şey eklemeyi tercih:

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

Referans için, <<<EOB ve EOB;, bir heredoc olduğunu.

Kaynak: The no-framework PHP MVC Framework Rasmus Lerdorf tarafından