Sabah twitter üzerinden “PHP’nin kötü kararlar aldığını düşünüyorum. 4–5 sene önce hem modern hem de popüler bir dil olmayı başarıyordu PHP. bugün ise başaramıyor.” yorumunu yapmıştım. Kapalı bir ifadeydi, haliyle nedenlerine yer verilmemişti.
Biraz açmak istiyorum.
2010'ların başında PHP neler yapıyordu:
- MySQL paketi yetersiz olduğu için MySQLi’yi ortaya atıyordu. Transaction desteği geliyordu.
- PHP 5 ile object oriented yapısını yeniden ele almış PHP durak vermiyor, SPL ile dile yeni objeler katıyordu.
- PHP’nin en güçlü yanı kütüphanesiydi sürekli yeni fonksiyonlar ekliyorlar, bunlara özellikler getiriyorlardı.
- Extensionlar sayesinde genişlemeye tam destek veriyordu.
- PDO ile veritabanı katmanını soyutlaştırıyor. Mümkün olduğunca abstraction üzerinden yazılımcı problemlerini çözmeye çalışıyorlardı.
- Düzenli kodlar üretilebilsin diye en popüler framework’ü CodeIgniter olmasına rağmen topluluğa öncülük ediyor ve Namespaceleri ortaya atıyordu.
2015'lerde PHP neler yapıyor:
- Performans tarafında iyileştirmeler yapıyor.
- Dil sentaksını genişletmeye çalışıyor.
- Kod tekrarının daha az olması için anonymous method ve classları oyuna sokuyor.
Özetle PHP eskiden dikey büyüyerek platforma yeni olanaklar sunarken, şimdi daha çok özelliklerini konsolide ederek muhafaza etme konumuna geçti.
Ben bu ivmedeki düşüklüye ve eski cesaretli "yapı sökümcü" ruhun kaybına razı olamıyorum. Hem PHP'e internallarını öğrenecek kadar yatırim yaptım, hem de gönülden sevdiğim bir üründen bahsediyorum. Paralelde diğer programlama dillerinin de kullanıcısı olduğum için yeni proje başlangıçlarında elim diğer platformlara kaymaya başladı yılların PHP kullanıcısı olmama rağmen.
Öncelikle mimari bir dönüşüm lazımdı. Shared hosting'lerin olduğu dünyada CGI üzerinden PHP devrim yapmış olabilir. Ancak şu anda containerların, fonksiyonların portatif hale geldiğı bir dünyada PHP yeni bir şeyler söyleyemedi. Halen “PHP her request’de tüm kodu tekrardan interpreter’dan geçirip işlem tamamlandığında bunu yok eden bir yapıya sahip”. Evet bu kulağa çok deterministik gelse dahi ben programlama ihtiyaçları hızla artan biri olarak long-serving processler/application serverlar üzerinden PHP ile koşan bir runtime da tasarlamayı isterdim.
- Paket yönetimi ile ilgili sırtını tamamen composer’a dayıyor. Her requestte tekrardan dependency sınıfları teker teker aranıyor. Bunu kendi application server’ında çalışan birçok platform dille bütünleşik bir şekilde sundu. En garibanları Node.js bile NPM ile PHP'den daha ileride.
- Asenkron işlemler yapmak imkansız. (async ile threading farklı konulardır)
- Mikroservislerin, container bazlı uygulamaların üretildiği dünyada soket iletişimi nonblocking değil.