PHP çiftleşmiş sistemde koşullu uygulamak için en iyi yolu?

3 Cevap php

Ben bir özel CMS / haber sistemi için çok basit bir PHP çiftleşmiş sistemi oluşturma. Her makale intro ve tam içeriği (varsa) sahiptir. Ben formun bir koşullu olmasını istiyorsanız:

{continue}click to continue{/continue}

Bu yüzden devam etmek mümkün ise, metin başka türlü, bütün bu dizesini görüntülemek yok gösterecektir "devam etmek için tıklayın." Şimdiye kadar, bu gibi çalışır: Biz devam eğer, {devam} etiketlerini kaldırmak; Aksi takdirde, her şeyi kaldırın.

Şu anda preg_match_all ikinci durumda dize maç için kullanıyorum. Eşleşen metni kaldırmak için en iyi işlevi nedir? Başka basit bir str_replace, falan?

Ya da bu genel uygulamak için daha iyi bir yolu var mı?

3 Cevap

Neden kullanmayın preg_replace_callback?

Özellikle:

preg_replace_callback('!\{continue\}(.*)\{/continue\}!Us', 'replace_continue', $html);

function replace_continue($matches) {
  if (/* can continue */) {
    return $matches[1];
  } else {
    return '';
  }
}

Ben preg_replace_callback derece yararlı buluyorum.

Üzgünüm insanlar cevap bu tür alay edilmiştir biliyorum, ama sadece Smarty kullanabilirsiniz. Onun basit, kararlı, zeki, özgür, küçük ve ucuz. Nasıl kullanılacağını öğrenme bir saat harcamak ve geri bakmak asla.

www.smarty.net git

PHP çiftleşmiş sistemleri için uygun yolu, şablon (durum makinesi kullanılarak ya da en azından preg_split) ayrıştırmak ondan PHP kodu oluşturmak, ve sonra sadece bu PHP kodu kullanmaktır. Sonra koşullu ifadeler normal if kullanmak mümkün olacak.

Düzenli ifadeler şablonları uygulanması için iyi bir fikir değildir. Bu yuvalama işlemek ve temel durumlarda ötesinde uygun sözdizimi zorlamak PİDE olacaktır. Performans (birkaç kez geriye ifade oluşturmak için ve hatta daha sonra şablonlar tarama ve kopyalama KBS bitireceğiz dikkatli olmak zorunda) çok kötü olacak.