Str_replace ile PHP çiftleşmiş?

9 Cevap php

I think the basic principle of a PHP templating system is string replacing, right? So can I just use a string to hold my html template code like

$str_template = "<html><head><title>{the_title}</title><body>{the_content}</body></html>"

ve aşağıdaki kodda sadece benim şablon değişkeni gibi içine veri itmek için bir str_replace yapmak

str_replace( $str_template, '{the_title}', $some_runtime_generated_title );
str_replace( $str_template, '{the_content}', $some_runtime_generated_content );

sonra geçen at

echo $str_template; 

Bu umarım biraz daha hızlı, tüm değişken geçen süreç yapacak? Ben bu garip bir soru olabilir biliyorum ama herkes bunu denediniz mi?

9 Cevap

Bu genellikle bir çiftleşmiş sistem için temel fikirdir. Gerçek çiftleşmiş sistemleri çok daha fazla yetenekleri var, ama özünde bu yaptıkları budur.

Bu "bütün değişken geçen süreç biraz daha hızlı yapmak" olup olmadığını sormak. Neyi daha hızlı? Eğer şu anda yaptığınız şey ile performans sorunları çalıştırıyor musunuz?

Evet, bu bir çiftleşmiş sisteminin arkasındaki temel fikirdir. Bunu daha soyut o, başka bir yöntem örneğin parantez ekleyelim verebilir.

Ayrıca str_replace ile diziler kullanabilir ve böylece bu gibi bir işlev çağrısı ile daha birçok cümledeki yapabilirdi

str_replace(array('{the_title}', '{the_content}'), array($title, $content), $str_template);

Ben çalışmak sistemi Spoon Library, onların şablon sistemi çok büyük bir performans artışı derlenen şablonları da dahil olmak üzere, oldukça kaya sağlam olmasıdır.

Bu bir şablon motoru kullanmak iyi bir fikir değil.

Ama senin fikrin html büyük olduğunda yavaş ve daha değişkenleri ihtiyacınız varsa yavaş olsun alır. yerini hatırlamak her istek için yürütülür.

you can use html files containing php tags for output (like <?=$var?>) and loops only. include them via "include" to your php code. thats much faster.

take a look at smarty. this is my favorite template engine for php. smarty has many good features like caching and it is extendable by plugins.

Eğer anlarsanız Alman bir göz atın here. smarty içine küçük bir giriş var.

Ben en belirteçleri (değişkenler ve düz metin) içine kodunu tatili bir ayrıştırıcı kuracak. Kolay bir yaklaşım olarak, bunu yapmak için pre_split işlevini kullanabilirsiniz:

$tokens = preg_split('/(\{[^\}]+\})/', $string, -1, PREG_SPLIT_DELIM_CAPTURE);

Şimdi belirteçleri yineleme ve bir değişken veya düz metin olup olmadığını kontrol edebilirsiniz:

foreach ($tokens as $token) {
    if ($token[0] === '{' && $token[strlen($token)-1] === '}') {
        // token is a variable
    } else {
        // token is plain text
    }
}

Bu yaklaşımın avantajı, değişkenler daha önce değiştirilmiştir metinde değiştirilmemiştir olmasıdır. Yani:

$foo = '{bar}';
$bar = 'bar';
$template = 'Lorem {foo} {bar} sit amet …';

İşte metin Lorem bar {bar} sit amet … ile değiştirilir değil Lorem bar bar sit amet … bu kod, {bar} sonra yerini ediliyor ile olur gibi olacaktır {foo} .

Sadece değişken genişleme yaparsanız, bunu yapabilirsiniz:

$str_template = "<html><head><title>$the_title</title><body>$the_content</body></html>";

It will work as well...
Several people wonder why there are template system when PHP is already a template system...

Tabii ki, bu sistemlerin diğer avantajları tasarımcıları tarafından işlemek için (veya araçlar tarafından oluşturmak için) belki daha kolay değişkenler, daha güvenli erişim, ağır şablonun ortak bir eleştiri görünümü katmanda ... mantık sınırlama gibi, orada Neredeyse onunla başka bir şablon sistemi yazmak o kadar çok mantık ile Smarty gibi sistemleri! ;-)

Savant, bir orta yol alır gibi bazı şablon sistemleri,. :-)

temelde fikir biri, ancak şablon çok daha fazlasını sunuyor şey vardır ki, bu yerel şablonunuzu tasarlamak bu şekilde, sunucu yolları ile şablon içine göreli yolları yerine, çünkü örneğin RainTPL, WYSIWYG ve sunucuda çalışır ihtiyaçları img / css değiştirmek olmadan.

Anyway here there's few php template engine compared: http://www.phpcomparison.net/

Aslında "Sizin Common Sense" den cevap doğru olanıdır. Geçerli içeriğini kullanmak ve değişkenleri değiştirmek için PHP kullanabilirsiniz. Bunun yerine çıkış yazma, bir tampon içinde onu tutmak için) (ob_start yapmak ve yerini içeriği alabilir. Kolay ve şık!

You simply can't make a template this way.
A real life template will require not only plain variables to fill but also several control structures, or at least some sort of blocks to control certain areas of the page (to make a loops for example).
So, you can't make a template with str_replace only. Some regexps and sophisticated parsing will be required too.

PHP kendisi - Böylece, zaten senin emrinde bir şablon motoru ile sopa daha iyidir!