Büyük projeler için hiçbir PHP?

11 Cevap php

Ben (önerilen değil, tartışılan değil, teklif değil) insanlar PHP büyük projeler için kullanılmaması gerektiğini belirtmiştir birkaç mesaj okudum.

Öncelikle PHP geliştiricisi olmak, ben iki soru sormak:

  1. Ne bir "büyük bir proje" tanımlar?
  2. Neden değil? PHP kullanarak tuzaklar nelerdir

Ben küçük bir geliştirme takımı çalıştırmak ve kaliteli inşaat, organizasyon, dokümantasyon, yorumlama ve kapsülleme bizim en öncelikli deneyimlerinden biliyorum. Vaktimi harcıyorum eğer biz kendi çerçevesi ve yaklaşımını kullanarak ama yine de, ben daha fazla yatırım yapmak istemiyorum büyük projeler geliştirmek edebiliyoruz.

Düşünceler?

11 Cevap

Insanlar mantığı ile sunumunu kod yazmak, ya da SQL enjeksiyon izin sağlar ki, çünkü PHP korkunç bir dil olduğunu, düz dışarı derken ben gerçekten nefret ediyorum. That's nothing at all to do with the language, that's the developer.

PHP kendisi son derece ölçeklenebilir olduğunu kanıtlamıştır: Vikipedi İnternet üzerindeki en büyük ve en popüler sitelerinden biridir ve PHP çalışır. Yeter dedi?

Daha az muhtemel kimse fakir, az sıçramalı kodu yazacak hale getiren, çalışmak için bir çerçeve vermek orada araçları / kütüphanelerin bir yeri vardır: vb CakePHP'ye, Symfony, PDO, Smarty, vs vs görmek

Bu giriş çok düşük engelleri olan bir dildir, çünkü kötü bir rap aldı: ücretsiz, sen 'çok ucuz PHP hosting, the documentation is the best there is , there's plenty of tutorials online, plus it makes a lot of things very easy (eg: open a URL and get the contents of the file: file('http://www.google.com alabilirsiniz); .) Bu yenilere bir sürü onu aldı ve onunla çok tehlikeli siteleri bir sürü yapılmış, ancak bu sizin ilk olarak seçim ne olursa olsun dil ile ne gidiyor demektir.

Sağlam bir ORM çerçeve (SO en iyi olduğu konusunda yaklaşık 30 soru var) ile çalışmak, ve size iyi tedavi edecek.

Kullanmak değil ki bir sürü insan gerçekten PHP 4 kullanmayın diyorsun. Aşağı bu gelir

you can write good code in any language

ve

you can write bad code in any language

PHP can very often lend itself to becoming tangled spaghetti code libraries ve make your 'application' really just a series of scripts (see Moodle for a good example of this...)

I think a lot of the 'Don't use PHP for large stuff' is coming from PHP being hacked up from it's original purpose: a templating language. Which I can understve, but there are lots of projects that prove you can do it (Drupal, mediawiki, facebook).

update: görünüşte facebook php değil veya yeterli ya Peki yerine flickr veya digg ya da her türlü olanak ;) şey karmaşık değildir.

Gidecekseniz büyük projeler için PHP kullanmak için hiçbir neden. Sonuçta, Facebook PHP üzerine inşa edilmiştir. Ancak sorunlar olacaktır, ancak herhangi bir büyük proje ile sorunları vardır.

Ne PHP çok yaygın hale giriş ve ucuz hosting düşük engeldir. Bu bir Apache uzantısı olarak çalışır ve hemen hemen sadece kodlama başlar. Eğer böyle. Net veya Java gibi daha kurumsal platformlar için giderseniz, onlar giriş için çok daha yüksek bir bariyer var ama onlar da bu ölçek uygulamaları yapmak yardımcı olmak için altyapı bir sürü gelir.

Örneğin, PHP veritabanı soyutlama (imho) Kederli. Bu satıcıya özel bulunuyor. MySQL ile, insanlar gibi şeyler yapmak eğilimindedir:

function get_users($surname) {
  mysql_query("select * from users where surname = '$surname'");
  ...
}

hangi çeşitli nedenlerden dolayı kötü:

  • Bu sorgu önbellek kötü kullanımını yapar;
  • Bu karakterler (tabii ki, mysql_escape_string() ile yapılabilir ama insanlar bunu yapmayın ne sıklıkta şaşıracaksınız) kaçan işlemek değil; ve
  • SQL enjeksiyon saldırıları izin verecek şekilde kod oldukça kolay.

Şahsen ben tüm yukarıdaki için mysqli tercih ederim ama o kendi sorunları var: LONGTEXT alanları kullanarak mysql çöker ve hala hiçbir düzeltme (evet ben ve birkaç diğerleri bir hata yükseltilmiş) ile en azından 2005 yılından bu yana yapmış olduğu yani.

Java (Ben daha tanıdık olan ile) ve JPA veya Ibatis Bu karşılaştırmak daha yüksek başlangıç ​​maliyeti ile çok iyi ORM çözümleri vardır ama onlar bir kurumsal ölçekte size yardımcı olacaktır.

Yani PHP üzerinde büyük projeler yapıyor yasak değil. Bu size daha fazla diğer platformlar sağlamak çoğaltmak için kendinize çalışmak giderek yapmak zorunda sadece zor olduğu içinde.

Söyleniyor, PHP + memcached / APC + beanstalkd uzun bir yol gidiyor.

Ah o başka bir sorun: PHP gerçekten işleme arka plan ya da parçacığı desteklemiyor. Bunun için başka bir şey (veya bağımsız komut) gerekir. Başka bir şey kullanıyorsanız, neden (örneğin Java, Ruby,. Net, vb) çok Web şeyler için bu kullanmak değil mi?

question I linked silindi gibi, ben burada bazı yer olacak:

Question


Ben PHP korkunç bir dil çağıran başka bir soru parçacığı bir dil-in-yanak açıklama yaptı ve o deli gibi aşağı oy var. Görünüşe PHP seviyorum burada bir sürü insan var.

Yani gerçekten merak ediyorum. Ne eksik? Ne PHP iyi bir dil yapar?

İşte sevmemek için benim nedenleri şunlardır:

  • PHP yerleşik ve kütüphane işlevleri tutarsız adlandırma vardır. Öngörülebilir adlandırma desenleri herhangi bir tasarım önemlidir.

  • PHP yerleşik fonksiyonların tutarsız parametre sipariş var, örneğin array_map vs array_filter basit durumlarda rahatsız edici ve beklenmedik davranış ya da kötü her türlü yükseltir.

  • PHP geliştiricileri sürekli yerleşik işlevleri ve alt düzey işlevselliği itiraz etmek. Onlar pass-by-başvuru işlevleri için önerilmemektedir zaman iyi bir örnektir. Bu kimse, diyelim ki, fonksiyon geri aramaları yapmak için bir kabus yarattı.

  • Yeniden tasarlanırken dikkate eksikliği. Yukarıdaki amortisman, birçok durumda, işlevleri için varsayılan değerler anahtar kelime sağlama yeteneği ortadan kaldırmıştır. Onlar PHP 5 bu sabit, ancak PHP 4 pass-by-başvuru kalktı!

  • Isim alanların yoksul yürütme (hepsini eski no name boşluk). Şimdi isim alanlarda var olduğunu, ne inceleyebilirsiniz karakteri olarak kullanabilirim? Backslash! Karakter bile PHP, kaçmak için evrensel olarak kullanılan!

  • Aşırı geniş örtülü türü dönüştürme hataları yol açar. Ben örtülü dönüşümler ile bir sorunum yok, diyelim ki, tekrar tamsayı veya yüzer. Ama PHP (son I işaretli) mutlu sihirli bir tamsayı için bir dizi dönüştürmek çalışacaktır.

  • Kötü özyineleme performans. Özyineleme herhangi bir dilde yazmak için bir temelde önemli bir araçtır; Karmaşık algoritmalar kadar basit yapabilirsiniz. Zavallı desteği affedilemez.

  • Fonksiyonlar harf duyarsız. Ben bu birinde ne düşündüğünü hiçbir fikrim yok. Bir programlama dili belirsizlik olmadan bir bilgisayar ve bir kod okuyucu hem davranışını belirtmek için bir yoldur. Case duyarsızlık çok belirsizlik tanıttı.

  • PHP (pratik gerektirir) sunumu ile işleme bağlanmasını teşvik eder. Evet, sen öyle yapmaz PHP yazabilirsiniz, ama bir şekilde (bir ses tasarım açısından) yanlış kod yazmak için aslında kolay.

  • PHP performans önbelleğe alma olmadan dipsiz. Herkes PHP için ticari bir önbelleğe alma ürün satmak mı? Oh, PHP tasarımcıları yapın, bak.

Hepsinden kötüsü, PHP web uygulamaları tasarımı kolay olduğuna insanları ikna eder. Ve bu gerçekten çok daha kolay dahil çaba yapmak yok. Ama aslında güvenli ve verimli hem de bir web uygulaması tasarlarken, çok zor bir iştir.

Programlama almak için pek çok ikna ederek, PHP programcıları kötü alışkanlıkları ve kötü tasarımın bir bütün altgrubunu öğretti. Bu onlara güvenle kullanmak için anlayış eksikliği yeteneklerine erişim verdi. Bu güvensiz olarak PHP'nin ün yol açmıştır.

(Ancak, kolayca PHP daha fazla ya da daha az güvenli başka bir web programlama dili daha olduğunu itiraf edecektir.)

Ben PHP ile ilgili eksik olduğumu nedir? Ben fakir programcılar yumurtlama olan bir dil bir organik yetiştirilen, kötü yönetilen karmaşa görüyorum.

Yani aksi halde beni ikna!


Top Rated Answer


Ben senin her bir madde yanıt bir deneyeceğim

PHP has inconsistent naming of built-in and library functions. Predictable naming patterns are important in any design.

Ben de seviyorum ve bu konuyu nefret ediyorum. Özünde, bu sorunu doğru olduğu için. Neden bir çizgi ile bazı bi-sözcük işlevi bölünmüş, bazıları değil mi? Neden samanlık ve iğne parametreler bazen argüman imza pozisyon takas? Bu çok saçma. Ama günün sonunda ... Bu gerçekten önemli mi? Sadece bir tarayıcı tık uzakta intellisense ve php.net ile benim IDE, bu anlaşmanın sadece düz büyük değil. Bir dili olarak PHP karşı olumsuz mı? Evet. Etkili bir programcı olmak benim yeteneğini engelliyor mu? Hayır.

The PHP developers constantly deprecate built-in functions and lower-level functionality. A good example is when they deprecated pass-by-reference for functions. This created a nightmare for anyone doing, say, function callbacks.

Şahsen, ben bu iyi bir nokta olmadığını düşünüyorum. Amortisman dile, PHP yaptığı kadar Kruft vardır, özellikle bir evrimi için gereklidir. PHP "kolay kötü bir programcı * olması için yapmak" için çokça alır ama onlar gibi dilden aptal yapıları, kaldırmaya çalıştığınızda aynı zamanda, PHP grubu da sorun olur çağrı zaman pass-by -referans. Pass-by-başvuru çağrı süresini ortadan kaldırarak onlar şimdiye kadar yapılmış en iyi hamle biriydi. Bu "özelliği" ile daha bir acemi geliştirici kendi ayaklarına ateş için hiç kolay bir yolu yoktu.

A lack of consideration in redesign. The above deprecation eliminated the ability to, in many cases, provide default keyword values for functions. They fixed this in PHP 5, but they deprecated the pass-by-reference in PHP 4!

Ben hiç dikkate genel bir eksikliği var sanmıyorum, ben sadece bu özel değişiklik soktu ve ağzınızda ekşi bir tat bıraktı olmuştur düşünüyorum. Vaktinden yıllar değil eğer dil değişiklikler genellikle ay bilinmektedir. Bir göç rehber 4-5 hareket için sağlanan ve sürüm farklılıkları kılavuzda belgelenmiştir. Pass-by-reference-time diyoruz korkunç bir "özelliği" olduğunu ve geliştirici diğer yollarla elde değil herhangi bir ifade gücü vermez. Ben (sihirli tırnak gibi diğer bok) ile birlikte gitti sevindim

Poor execution of name spaces (formerly no name spaces at all). Now that name spaces exist, what do we use as the dereference character? Backslash! The character used universally for escaping, even in PHP!

Ben bu konuda karışık duygular var. Parçam ", kimin umurunda karakter öncelemeli zaten bir dize dışında hiçbir anlamı yoktur" düşünür ve bir parçam "elbette onlar daha iyi bir şey kullanabilirsiniz" düşünüyor. Ama onlar olabilir? Bilmiyorum, ben Zend çözümleyici için bir geliştirici değilim. Da 5.3 kadar PHP hiç ad yoktu ki büyük bir dikkatsizlik mi? Evet, kesinlikle.

Overly-broad implicit type conversion leads to bugs. I have no problem with implicit conversions of, say, float to integer or back again. But PHP (last I checked) will happily attempt to magically convert an array to an integer.

Ben PHP bu nasıl yaptığını katılmıyorum için ok düşünüyorum, ama bu dili "kötü" yapar katılmıyorum. Ama bu konuda oturup güçlü yazarak vs zayıf konuda tartışmak istiyorum ne kadar bana sor. (PS I, at all yok) Kayıt için: bir argüman konularda türü ve baskı yoluyla çözülemeyeceğini tarafından zaman PHP bir e_warning seviyesi hata verecektir.

Poor recursion performance. Recursion is a fundamentally important tool for writing in any language; it can make complex algorithms far simpler. Poor support is inexcusable.

PHP web için bir DSL. Ben 8 yıldır bunu tam zamanlı yapıyorum ve belki genellikle can sıkıcı dizin veya XML zikzaklı bir tür için, özyineleme 4 veya 5 kez kullandık. Sadece sık sık web geliştirme için gerekli olan bir model değil. Ben yavaş performansını mazur değilim, ama bu bir üretim sorunu çok daha fazla akademik bir konudur. Eğer gerçekten güçlü özyinelemeli performans gerekiyorsa, PHP zaten sizin için yanlış bir dildir.

Functions are case insensitive. I have no idea what they were thinking on this one. A programming language is a way to specify behavior to both a computer and a reader of the code without ambiguity. Case insensitivity introduces much ambiguity.

Ben tamamen% 100 buna katılıyorum.

PHP encourages (practically requires) a coupling of processing with presentation. Yes, you can write PHP that doesn't do so, but it's actually easier to write code in the incorrect (from a sound design perspective) manner.

* Hmmm, bu konu umutsuzca tanıdık geliyor ...

- VEYA - Ama cidden, ben olağanüstü insanlar kesinlikle% 100 sen (hacmi ve stil PHP çiftleşmiş sistemleri tek başına bu kadar konuşuyor) istediğiniz herhangi bir çıkış sistemi uygulamak sağlayacak bir dil hakkında şikayetçi olacağını bulmak tüm bu yükü atlayın ve Sadece çıkışı doğrudan. Bu da tüm PHP kötü yapmaz. PHP iyi kılan bir parçası.

PHP performance is abysmal without caching. Does anyone sell a commercial caching product for PHP? Oh, look, the designers of PHP do.

(Bir hızlandırıcı gibi) bytekod önbelleğe alma, veya çıkış önbelleğe alma demek?

Eski, o gerçekten ben bu konu hakkında bakım ne kadar bilmiyorum. Hızlandırıcıları ücretsiz ve çalıştırmak kolaydır. O dilin bir parçası değildir Biz neden hakkında iddia olabilir ama sonunda, ben çok konularda sanmıyorum.

Eğer çıkış önbelleği bahsediyorsun o zaman sana ne diyeceğimi bilmiyorum. Önemli trafik HERHANGİ web projesi (örneğin tohum podcast # 27) önbelleğe alma ihtiyacı vardır. Bu bir PHP özgü bir sorun değil at all.

Özetle, ben PHP bir çok akademik moda bir "kötü" bir dil düşünün düşünüyorum. Ve önceki sonrası muhtemelen "halletmek" için PHP kullanmak benim gibi insanlar tarafından aşağı seçildi.


Second Top Rated Answer


Tüm eleştiriler (ve biraz daha fazla) geçerlidir. Sen izin ve hatta PHP nefret bekleniyor.

Ama sonra tekrar, bazı yararları vardır:

  • Her yerde birden bulunan
  • Hızlı (özellikle opcode önbelleklerini kullanarak)
  • Büyük toplum (ve büyük belgeler)
  • Eserler

Iyi kod yazarak tüm olumsuzlukları başka bir dilde yazmak istiyorum değilse Son olarak, birçok üstesinden gelebilir. Birçok kat daha hızlı çalıştırmak ve barındırmak için ve pek çok alternatife göre ölçekli kolay olacak ki, PHP, sağlam, güvenli ve iyi kokulu kod yazabilirsiniz.


Third Top Rated Answer


What is it that I'm missing about PHP? I'm seeing an organically-grown, poorly-managed mess of a language that's spawning poor programmers.

Simple. The fact that poor programmers get very defensive about their language. ;) PHP is easy to learn, much easier than the alternatives, and once you've learned it, it's not exactly obvious 1) what's wrong with PHP, 2) how the alternatives are better, and 3) how to switch to, and learn, one of the alternatives.

And perhaps the fact that, well, what alternatives do people have? ASP? That has plenty of problems on its own, from being unable to run on the majority of webservers (Apache), to some ridiculous and overengineered design choices on its own (webforms? Viewstate? AJAX where your asynchronous" requests are intercepted and run sequentially?) Ruby on Rails? Well, perhaps, except how many webservers support it again? It's not exactly easily approachable at the moment. And it's slow. So perhaps PHP's "strength" is really that no good alternative exists. At least this is why I stay away from all web programming when at all possible. PHP sucks, and I'm not too keen on any of the alternatives either.

PHP bile komik değil pek çok temel sorunları var. Unicode destek eksikliği, genellikle tam sunum karıştırma ve ... her şey, ya da kullanabilirsiniz (son I işaretli) yoktur varsayılan veritabanı modülü için, beklenmedik güvenlik açıklarına yol birçok örtülü tip dönüşümleri parametrelenmişse sorgular. Biz bir iki şey için yapılmış dili, veritabanı erişimi ve üreten HTML ve hangi hem de korkunç bahsediyoruz.

Bu sadece kötü bir karmaşa, bir dil tasarımı, nitelikli, ya da mümkün olmayan kişiler tarafından tasarlanmış bir dildir. ;)


Benim için kötü PHP günah iş mantığı ile sunum kaplinidir. Size daha iyi bir şekilde bunu yazamaz değil, ama sizi teşvik etmez, ve eğer bir şey değil sizi teşvik eder.

Güvenlik açıkları çok sayıda, çok PHP siteleri ile ilişkilidir. Ben (tüm siteleri bir sürü PHP ile yazılmış sonra) orantısız olduğunu ispat edemez, ama ben öyle sanıyorum. Eğer haklıysam güvenlik açıkları hata bir sınıf olduğundan, o zaman, ben PHP siteleri de bütün daha arabası olma eğilimindedir şüpheli.

(Ben birkaç büyük sitelerde işaret ve PHP bunu başardı diyerek şekilde bu karşı herhangi bir argüman olduğunu düşünmüyorum. Sonraki kapı komşusu füme çünkü biraz sigara kansere neden olmadığını söyleyerek gibi ve 100 yaşına kadar yaşadı.)

Benim için, ve büyük hatta çok büyük projeleri hakkında konuşurken, (öncelikle) tek kelimeyle aşağı kaynar: Dependencies.

Bir betik dili ile sorun dünyada her şey gibi: büyük avantajı, aynı zamanda büyük dezavantaj.

Büyük avantajı hızlı ve ücretsiz kod etmektir. Sadece bir senaryo yazmak ve o amaç sunucu var olacaktır. Hayır Seslendirme, sadece kodu gerekli.

Büyük dezavantajı bu script diğer komut rahatsız değilse kontrol etmek için, bir şekilde, olduğunu. Ya da daha iyi: Eski bir komut diğerleri güvenmek değiştirin. Eğer istediğiniz gibi tüm bağımlılıkları çalışmak emin misiniz?

Bu "normal" web sayfası nesil için doğru değildir, normaldir neyse burada araçtır. Ama biz de, kodun bir ek 100k çizgilerden oluşan müşterileri için özelleştirmeler ile, kaynak kodunun bazı 500k hatları dayanan bir ürün var. Ve ben bir derleyici (bir değişken veya yöntem çağrısı misstyping, burada düşük seviyede konuşma, gibi) tüm bağımlılıkları denetler ve uyardı / Yanlış bir şey yaptım durumda hataları bana bu ölümcül sevindim.

Ben bu düşünüyorum ve birçok büyük PHP görmüyorum neden diğer diller sağladığı gerçeği daha basit kullanımlı doğaları gereği "enterprisy" özellikleri ("banka kullanımlar" için yani uygulama sunucuları) aşağı kaynar (ya da daha iyisi: büyük) projeleri.

Check out this similar question - http://stackoverflow.com/questions/130869/can-php-handle-enterprise-level-sites-as-well-as-java

Özetlersek - Facebook, Wikipedia, Yahoo.com, Digg, Flickr ve diğer pek çok dev site PHP yayınlanıyor. Hiç bu kalibrede bir şey yapma yakın gelirseniz, yine PHP ile alabilirsiniz emin olabilirsiniz.

Nasıl bakımı, uygulamalarınız olacak, uzatılabilir, güvenilir, güvenli ve başarılı tamamen size kalmış ve dil agnostik olduğunu. Olsa PHP lehine, web uygulamaları oluşturmak için çok uygun araçlara sahiptir.

Firmamız PHP kullanarak birkaç büyük-ish web siteleri çalışan ve dili ile ilgili olan herhangi bir sorun vardı.

Bunların hepsi iyi cevaplar.

Ben bir acemi. Ben sadece 5 yıl için kodlama oldum ama ben doğrudan desteklemek ve büyük web siteleri için küçük 85 yönetmek ve ben bir gün için aşağı bir web sitesi olan dava için potansiyel öğrenmek için arzu bir çok katkıda bulunacak ne anlatacağım nasıl ve daha iyi kod olun.

Kurulduğu geliştiriciler bu konuda düşüncelerini paylaşmak duymak güzel. PHP iyi olduğunu düşünmüyorum, ama o "en iyi uygulamalar" benim iyi yatırım servis edilir görünüyor.

Herkese teşekkürler!

There's something about the construction of the PHP language that is not good enough for me. For example, the name of the functions. It is a non best practice use a several ways to name a function in one language. The mixture between underscores (function_name), words stick together (functionname), etc.I mean, this is really a mess. There are too many functions that are very similar or do the same things, but their names are so confusing. This is not characteristic of a good programming language.

Büyük dağıtımlarda, dil yazmak için yeterince kolay ve belirli olması gerekir. PHP değişken türleri bildirimi gibi atlar şey, anlamak ve daha sonra başa çıkmak çok zor olur.

Diğer nokta özellikleri ve bazı diğer iptali sürekli ektir. Bu PHP 5 OOP ilavesi olacak programcılar için işleri kolaylaştırmak, ama ne geri uyumluluk konuları hakkında varsayar?

Olduğu gibi bu programlama dili olduğunu başlıca nedeni, kökeni nedeniyle: Personal Home Page. Büyük dağıtımlar için tasarlanmış değildi.

Ben bu dilin bir kurumsal ağırlıklı dil yapmak için büyük çabalar olduğunu biliyorum, ve ben şahsen, bir yeterince iyi açık kaynak kodlu sunucu tarafı programlama dili için bekliyorum; Bu gün gelene kadar ama, bu olacak köprünün altından çok sular çalıştırılır.