Neden "neredeyse tüm PHP çerçeve kullanmak yapmak
8 Cevap php
  • PHP kısa etiketi <?= $var ?> bir süre için deprecated olmuştur.
  • Hemen hemen tüm PHP frameworks use the long form <?php echo $var ?> (ör: symphony, Yii, Kohana)
  • Smarty kısa bir form {$var} destekleyen bir ünlü PHP şablon motoru
  • Template engines (like Smarty) are easier for web designer
    • Bir şablon gösterileri düzenlerken {$var} yerine hiçbir şey göstermiyor (çünkü <..>)
    • Shorter syntax (az <>, bazı klavye düzeni aynı tuş üzerinde özellikle yazarak)
    • Şablonlar önceden derlenmiş ve neredeyse aynı performances vererek önbelleğe vardır

Tüm bu noktalar neden tüm çerçeve süper uzun PHP sözdizimi kullanmak gibi yapmak, yapmak beni merak ediyorum? (Küçük yükü hariç) Smarty gibi bir şablon motoru kullanarak değil güçlü bir noktası var mı?

8 Cevap

İşte ne Symfony framework Fabien Potencier has to say about templating engines:

Why do people still think PHP is a templating engine? Sure enough, PHP started its life as a template language, but it did not evolve like one in the recent years. If you think PHP is still a template language, can you give me just one recent change in the PHP language which enhanced PHP as a template language? I cannot think of one.

O da bir çiftleşmiş dilde arar özellikleri açıklanmaktadır:

  • Gereğinden
  • Şablon odaklı sözdizimi
  • Tekrar kullanılabilirlik
  • Güvenlik
  • Sandbox modu

Yanı sıra onun en sevdiği şablon dil yapmak bazı özellikleri Twig öne çıkmaktadır:

  • Yerli şablon kalıtım (şablonlar sınıfları olarak derlenmektedir);
  • Solid automatic auto-escaping (with no associated runtime overhead as everything is done during compilation);
  • Very secure sandbox mode (white-list the tags, filters, and methods that can be used in templates);
  • Great extensibility: you override everything, even the core features, by bundling your own tags and filters as an extension; but you can also manipulate the AST (Abstract Syntax Tree) before compilation. By leveraging this possibilities, you can even create your own DSL (Domain Specific Language), targeted at your application.

Yazının yorumlarında, o "Muhtemelen Symfony 2 parçası olacak. Ama önce bazı toplum geribildirim gerekir.", Diyor

the full article çiftleşmiş sistemleri lehine onun bütün argüman almak için okuyun.

PHP ile ilgili bir şey olduğunu zaten is bir çiftleşmiş dildir.

Smarty, o kadar iyi, yük eklenir. Bunu kullanmak için iyi bir nedeniniz yoksa, o zaman neden olur? Backend çerçeveler kullanan kişiler zaten PHP aşina olan geliştiriciler, bu yüzden onları bunun üstüne öğrenmek için yeni bir sözdizimi ile bir çiftleşmiş motoru kullanmak yapmak için hiçbir neden yok.

Çoğu çerçeveler bir şablon motoru ekleyerek çok iş almaz yeterince esnektir. Bir çerçeve Smarty kullanmak sizi zorladı inşa edilmiş ise çerçeve kendisi daha az esnek olacağını, çünkü o, az popüler olacak.

"Uzun sözdizimi" açısından, hiçbir çerçeve güvenlik sorunları ile artık kullanılmayan sözdizimi kendi şapka asmak için gidiyor. Onlar (hiç kimse bu gün olması gereken) kullanmak istediğiniz veya istemediğiniz takdirde çerçevenin kullanıcıya kadar sol, ancak bir çekirdek çerçevesinin etrafında kısa etiketleri bina daha az taşınabilir hale olabilir.

Ben <?php print $foo; ?> diyebileceğim bilmiyorum "süper uzun sözdizimi."

Aslında standart varsayılan ise tipik kısa etiketleri her zaman, sunucular üzerinde etkin olmasıdır. O bu yolu gidiş güvenlidir.

Smarty gibi şablon motorları gerekli değildir işleme ek bir katman eklemek - çoğunlukla bloatware vardır. Genellikle sözdizimsel şeker tutarı ne için çok fazla ek işleme ekleyin. Tam PHP etiketleri mevcut olduğunda bir şablon motoru kullanarak pranga giymiş gibi - düzenli PHP ile aynı şeyi başarmak için öğrenmek için onun kendi tuhaflıklar ile başka bir dil olur.

Benim durumumda nadiren olmayan bir programcı ya da tamamen kolayca bir şablon motoru kullanmak gördüm. Bu iki örneği ele alalım:

Smarty:

<select>
{foreach from=$k item=v}
 <option value="{$v.value|escape:'html'}">{$v.label|escape:'html'}</option>
{/foreach}
</select>

PHP:

<select>
<?php foreach ($k as $v) { ?>
 <option value="<?php echo htmlentities($v['value']); ?>"><?php echo htmlentities($v['label']); ?></option>
<?php } ?>
</select>

Şimdi, Smarty sözdizimi biraz daha temiz olabilir - ama dürüst olmak gerekirse, herkes except bir programcı kod rahatça ayarlayabilirsiniz biriyle edebilmek çalışma olacak mı? Şablon motorları herhangi bir büyük avantajlar sunan olmadan işleme / mantığı fazladan bir katman ekleyin.

Bazı nedenleri vardır:

  • Bunlar güvenlik kaygıları nedeniyle php gelecekteki sürümlerinde kalktı edilmelidir.
  • Bazı ana bunları devre dışı.

More:

Are PHP short tags acceptable to use?

They're not recommended because it's a PITA if you ever have to move your code to a server where it's not supported (and you can't enable it). As you say, lots of shared hosts do support shorttags but "lots" isn't all of them. If you want to share your scripts, it's best to use the full syntax.

I agree that

I don't buy readability as a reason at all. Most serious developers have the option of syntax highlighting available to them.

More

http://terrychay.com/article/short_open_tag.shtml

Kısa açık etiketleri not kalktı ve onlar da not PHP6 kaldırılacaktır vardır.

Bağlantılı yazılar da konu hakkında yararlı bilgiler taşırlar.

Rasmus Lerdorf (3 link) alıntı:

Gördüğüm argümanların çoğu, temelde <? kötülük ve hatta yok, ama bu geçerli bir soru değildir diyorsun. Bu var yok, ve biz bunu kaldırarak değil, bu nedenle burada sadece gerçek argüman anında bu etiketleri etkin veya devre dışı bırakmak mümkün kod tarafından tanıtılan WTF faktördür. Bu gördüğüm ve tek geçerli argüman bulunuyor. PHP kodu xmllint ile doğrulanmış olabilir ve olsun veya olmasın <? ki bu doğru değildir, geçerli xml olup olmadığını, tamamen noktaya yanında. Hepimiz kullandığınızda <? XML uyumlu olmadığını biliyorum. Ve büyük çoğunluğu için ok bulunuyor. [...]

Benim görünümü insanların çiftleşmiş istiyor. Her ne kadar ben kavramı nefret ve her zaman bu konuda çok vokal olduğu gibi, insanlar basit çiftleşmiş etiketleri istiyorum. Hatta kadar dosyaları ayrıştırma ve {blah} yerine <?php blah() ?> kullanımı için her tek isteği üzerine PHP kod üreten olarak gidecek. Insanlar sözdizimsel şeker büyüklüğünde performans isabet bir sipariş almaya istekli olması bana manidar, ama sadece orada tüm çiftleşmiş sistemleri bakmak edilir. Ve evet, ben vb güvenilmeyen şablon yazarlar için belirlenen özelliğini kısıtlayan olarak çiftleşmiş kullanmak için başka nedenler olduğunu biliyorum ama sadece daha az yazıp onların etiketleri güzel olmasını istiyorsanız kaç kişi şaşıracaksınız. <?blah()?> Benim kitabımda performans ve aklı için bir kazançtır geçmek için bu millet alınıyor. Evet, tam bir zafer değil, ama yine de bir kazançtır.


Ben PHP kutudan ne yapabilirim yeniden keşfediyor bir çiftleşmiş dil olarak kullanmak normal PHP sözdizimi daha kolay bulmak gibi Şahsen ben çiftleşmiş sistemleri önlemek için deneyin. ViewHelpers eklenmesiyle, herhangi bir tasarımcı düzenli sözdizimi kullanılarak çok fazla sorun olmamalıdır. Aslında ben her zaman Template engines (like Smarty) web tasarımcısı oldukça belittleing için kolay, argüman bulundu. Ayrıntılı PHP sözdizimi estetik çekici olmayabilir, ancak, herhangi bir yarım beyin öğrenebilirsiniz.

Smarty kendi şablonları bir kaç karakter daha kısa yapmak gibi onlar büyük bir kütüphane eklemek istemiyorum.

Diğer yanıtlar yanı sıra sorunlu Smarty (ve benzer şablon motorları) yapmak bir kaç şey vardır.

İlk bunu javascript koymak için gidiyoruz eğer şablonun içinde bazı karakterler kaçmak gerekir olmasıdır. Lütfen javascript dinamik PHP tarafından oluşturulan, bu daha da kötüleşiyor; Bu kod okunabilirliği önemli ölçüde aşağı gider.

The second and most important is that when you're working in a decent OO framework Smarty will severely decrease the functionality of your code. When using PHP as your template engine you can use $this within your template to call methods in the controller that's parsing the template. Not only that, but you get access to all the methods that controller has inherited. With smarty you lose this entire functionality because $this no longer refers to your controller. In essence, instead of accessing your entire framework from your template, you only have access to Smarty's limited functionality.