Eğer biliyor PHP özgü antipatterns nelerdir?

6 Cevap php

PHP as a Blunt Instrument

Ben PHP son zamanlarda bir sürü etrafında kızıyorlar alıyorum duydum. Epeyce projelerde, ben deli php kod üsleri gördük - kişi, kod yazdı halüsinojenik uyuşturucu olsaydı çok kötü gerçekten merak ediyorum. Bazen, ilk geliştiriciler not yapmak için ne gibi biraz daha yol olsaydı kod gibi olurdu merak ediyorum.

Ancak, ben de% 100 OOP yapılması ve korumak için bir zevk idi bazı çok iyi organize PHP projeleri gördük, ama onlar tarafından yazılmış değil "php programcıları."

Ben bizim junior devs tüm Java Anti-Patterns için bir link verebilir. Yaygın hatalardan kendilerini ödünç Java birçok özelliği vardır çünkü bu sayfa hakkında güzel şeylerden biri Java-spesifik örnekler olduğunu. Ben php için benzer bir liste bulmak için umuyordum, ama bir google arama anlamlı bir şey ortaya koymamıştır.

Orada bir kaç soru what a developer should know when programming PHP için orada zaten, ama ben olumsuz odaklanmak istedim.

Eğer kaçınılması gerektiğini PHP gördük ve daha iyi bir şekilde aynı şeyi yapmak için ortak bir çözüm nedir ortak şeyler nelerdir?

Bence bana bariz örneklerinden bazıları söz olacak ama özel PHP değildir:

  • SQL bağlamak etmeyin. Ifadeleri veya uygun kaçışa hazırlamak kullanın.
  • Körü körüne HTML içine PHP embed etmeyin - çiftleşmiş / MVC kullanın.
  • Körü körüne ham filtresiz kullanıcı girişi sonrası yok - XSS saldırıları için fırçalayın.
  • Elle tüm mesajların ve GETler ayrıştırmak denemek etmeyin - bir web framework kullanın.

Burada PHP özel düşünecektim bazı örnekler olacaktır:

  • Dosyanın yok çok katmanlar / bağlama gerektiren ve koşullu bağlama kaçınıyorum içerir. Aksine, aklı başında bir adlandırma kuralı var ve organizasyon ile tutarlı olması.
  • Eğer yardımcı olabilir sürece yerine yerine ADODB gibi bir veritabanı çerçeve kullanmak, PHPs ham veritabanı API kullanmak etmeyin.
  • Mantıklı boolean testleri bekliyor, sonra tek bir yerde ve başka bir yerde bir mantıksal bir dize değişkeni ayarlayarak PHP'nin dinamik yazarak aşırı etmeyin.

Peki, sevdiğiniz PHP vardır don'ts ve bunu nasıl doğru yaparsınız?

6 Cevap

Bu sefer katılmıyorum:

  • Körü körüne HTML içine PHP embed etmeyin - çiftleşmiş / MVC kullanın.

PHP is a templating language. Ben MVC uygulanması kavramı ile kabul ederken, web çıkışı üreten etrafında bir başka DSL uygulamak için bir gereklilik olması gerektiğini neden, ben görmüyorum.

How Is PHP Done the Right Way?, bu konularda bir sürü kapsar.

Benim favori yapılmayacak biri olması gerekir:

$query = 'select * from users where username = ' . $_POST['username'];

Bundan çok daha korkutucuydu alabilirsiniz?

Php dosyaların sonuna kapanış? ">" Etiketleri ekleme yanlışlıkla çıkış tamponuna beyaz boşluk iterek yol açabilir. PHP yorumlayıcısı otomatik olarak dosyaları kapatma etiketleri ekleyin ve elle bunu yaparken biraz bir anti-desen olacaktır.

Benim şu anki hayvan kızdırmak sorgu işlevleri için tutarsız-dönüş türüdür. Eğer bir sorguyu yürütmek için işlevini çağırdığınızda bu olduğunu ve döner

  1. Null ya da YANLIŞ veya herhangi bir eşleşme bulunursa benzer bir şey
  2. Tek bir maç bulunursa eşleşen nesne / değer
  3. Birden fazla maç bulundu eşleşen nesneleri / değerler dizisi

hangi dönüş türlerini kontrol edin ve özellikle her durumda başa zorlar. O sadece her zaman 0, 1 veya n elemanlı bir dizi dönmek için çok daha iyi olurdu.

Bir favori eklemek olsaydı o karim79 tarafından yayınlanmıştır biri olmak zorunda değilsiniz:

$query = 'select * from users where username = ' . $_POST['username'];

PHP Birçok geliştirici yapılandırılmış çağında sıkışmış tutun. Insanlar html içine sert kodlama PHP tutmak neden PHP bir süre önce bu yana sınıfları ve nesneleri destekler, ben sadece şablonları ya da hiç bir şey olmadan, alamadım.

Ben. NET veya Java gibi diğer dillerde, gelen geliştiriciler pek çok geliştirici gibi programlama devam edersen dilini eleştirme hakkını kazandık inanıyorum. PHP çok esnek çok büyük bir dil, hala biraz küçük ama büyüyen, ama birçok sadece almak değil, onlar istediğiniz tüm eski klasik kopyalama & yaparak çözmek için yapıştırın.