Başlık biraz yanıltıcı oldu, lakin tamamen başlıksız da yazı yazmak olamazdı. Bu yazımızda PHP üzerine derinleşecek, Framework ve yaygın PHP araçları ile tanışacağız.
Umarım önceki yazımda bahsettiğim kaynakları inceleme şansınız olmuştur ve umarım birini seçmişsinizdir. PHP başlaması kolay bir dil olsa bile derinleşmesi zaman alan bir dil. Framework mesela, nedir? PHP konusunda kendimizi nasıl daha da geliştirebiliriz?
İngilizce öğrenin
İngilizce yazılım dünyasında, yazılımla ilgili belge yazımında standart dildir. PHP için de varsayılan belgelendirme dili İngilizce. Peki, İngilizce’yi nasıl öğreneceksiniz?
Belgelerle başa çıkmak için en azından A2 İngilizce seviyesine ulaşmanız şart. Maalesef ne kadar çok kelime bilirseniz bilin, dil bilgisi olmadan bir yerde tıkanırsınız. Raymond Murphy’nin Essential Grammar In Use kitabı sizi A2 seviyesine taşımaya yetecektir. B2 seviyesi için yine aynı yazarın English Grammar in Use kitabını tavsiye ederim. Bu kitaplar pahalı olsa da ülkemizde bulmak mümkün olan kaynaklar. Bu seviyelere uygun hikâye kitaplarını okuyarak da kelime bilginizi geliştirmeniz gerekiyor. Bu iki kaynak tamamen kendi başınıza çalışabileceğiniz kitaplar şeklinde hazırlandığı için kalitesi belirsiz kurslara tonla para vermek durumunda da kalmazsınız. Öte yandan kitaplar size İngilizce konuşmayı öğretmez.
PHP belgelerine aşina olun
PHP’nin gücü biraz da sunduğu fonksiyonlardan gelmektedir. PHP kendi içinde 1000 kadar fonksiyon ile gelmektedir. Bu kadar fonksiyonu ve hepsinin kullanım şeklini bilmek imkansızdır. Fonksiyonlar hakkındaki tüm bilgilere php.net sitesinden erişebilirsiniz. Örneğin sitede array (dizi) diye aratırsanız hem dizi nasıl oluşturulur örnekleriyle birlikte öğrenebilir hem de dizi ile ilintili fonksiyonlara ulaşabilirsiniz. Aynı şekilde W3School sitesinde de çok faydalı kaynaklar bulabilirsiniz. Bunları sık kullanılanlara eklemekten çekinmeyin. Aynı şekilde Google üstünde PHP fonksiyon adı diye aratırsanız ilgili fonksiyon ile ilgili yazılmış çeşitli kaynaklara ulaşabilirsiniz.
PHP ile HTML kodlarını birlikte kullanmamak
İlk başlarda PHP HTML kodları ile birlikte kullanılıyordu. Örneğin bir özgür yazılım projesi olan phpBB’nin ilk sürümlerinde ( https://github.com/libreajans/phpbb1/blob/main/index.php) 2000-2001 yılları arasında PHP kodları genelde yukarıdaki gibi yazılıyordu. PHP kodlarının, SQL sorgularının ve HTML kodlarının iç içe kullanıldığını görürsünüz. Bu tarz bir kullanım artık asla tavsiye edilmemektedir ve neredeyse tüm PHP projelerinde terk edilmiştir.
Şablon/Template motoru kullanmak
phpBB örneğinden devam edelim. phpBB 2.x serisinde PHP kodları ile HTML kodlarını birbirinden ayırmak yoluna gitmiştir. Sonuçta yönetilmesi daha kolay PHP dosyaları ortaya çıkmıştır (Bkz: https://github.com/libreajans/phpbb2/index.php). Ne iş yaptığına değil, kodun okunurluğuna bakmanız yeterli.
PHP öntanımlı olarak bir şablon motoru ile gelmez. PHP içinde kullanabileceğiniz çeşitli şablon motorları bulunmaktadır. Twig, Blade, Smarty bunlardan bazılarıdır.
Composer kullanmak
Twig şablon motorunun kurulum sayfasına geldiğinizde Prerequisites/Önkoşullar kısmında en azından PHP 7.2.5 sürümüne ihtiyacınız olduğunu, Composer ile kurulumun tavsiye edildiğini ve composer require "twig/twig:^3.0"
diye bir satırın var olduğunu görebilirsiniz.
PHP öntanımlı olarak bir paket/kütüphane yöneticisi ile gelmemekle birlikte Composer bu konuda lider konumdadır. Composer paketleri genelde projeye özgü olarak yapılandırılır. Composer kurduktan sonra yukarıdaki kodu çalıştırırsanız proje klasörünün içinde composer.json, composer.lock ve Vendor isimli klasörler oluştuğunu gözlemlersiniz. Composer, yüklediği dosyaları Vendor klasöründe tutar. Composer ile paket ekleyebilir, silebilir veya paketleri güncelleyebilirsiniz.
Sınıfları kullanmak ve nesneye yönelik kod yazmak
phpBB 2.x için verdiğimiz örneği incelerseniz işlemlerin pek çok dosyaya yayıldığını, çok az fonksiyon kullanıldığını (40 tane sayabildim) ve neredeyse hiç Class/Sınıf kullanılmadığını gözlemleyebilirsiniz. Tekrar eden işlemleri veya tekrar etmese de bir bütünlük arzeden işlemleri fonksiyonlar olarak tanımlayıp kullanabilirsiniz. Bu işlem size bir parça kodu gerektiğinde yeniden kullanma imkanı sağlar. Classlar/Sınıfları ise fonksiyonların tutulduğu kapsayıcılar olarak düşünmek işinizi kolaylaştırabilir. Fonksiyonlarınızı yaptıkları işleve göre farklı sınıfların içine yazabilirsiniz. Sınıflar kodunuzun taşınabilir ve gerektiğinde yeniden kullanılabilir olmasında yardımcı olur. Sınıflar çok sayıda fonksiyon barındırmaya veya çok uzun dosyalar oluşturmanıza neden olabilir. Bu aşamadan sonra OOP mimarisine aslında adım atmış olursunuz. Maalesef PHP ve OOP konusunu bu kadar kısa bir yazıya sığdırmak imkânsız. İlk yazımdaki Mehmet Ali Uysal’ın PHP Eğitim Kitabı işinizi kolaylaştıracaktır. Elbette bu konuda onlarca yazılmış makale de bulunmaktadır.
PHP sürümlerini takip etmek
PHP 5 öncesi sürümleri tamamen yok sayabilirsiniz. PHP 5’in ilk sürümü 2004 yılında yayınlanmış, son sürümü ise 2018’in Aralık ayında yayınlanmıştır ve bu dal için artık güvenlik güncellemesi dahil hiçbir destek sunulmamaktadır. Yine de PHP 5 sürümü için yazılmış kodlar ile karşılaşmanız mümkündür.
PHP ana (major) sürümleri için geri uyumluluk gözetilmemektedir. Daha önceki sürümde desteklenen bir fonksiyon artık desteklenmiyor olabilir. PHP 5.5.x sürümü için yazılmış bir kod PHP 5.6. için uyumsuzluklar barındırabilir. PHP belgeleri bu konuda size yol gösterecek çeşitli dökümanlar sunmaktadır.
PHP sürüm takvimi önceden çok belirsizdi. Artık sürümler ve destek süreleri daha net olarak belirlenmiş durumdadır. Güncel olarak PHP ile kod yazıyorsanız hedef sunucunun ilgili PHP sürümünü desteklediğinden, yerelinizde de aynı sürümü kullandığınızdan emin olun.
İpucu: Kimi sunucularda her domain için bağımsız olarak PHP sürümü seçme özelliği bulunmaktadır. Yine de bu özellik kimi bulut sunucularında kullanıcı bazlı olarak yapılandırılmaktadır. Bu durumda diğer domain ve projelerin de hedeflediğiniz sürümü desteklediğinden emin olun.
KISS, YAGNI, DRY, SOLID, MCV
KISS konuya en basit şekilde yaklaşmayı, olabilecek en az satırda kod yazmayı tavsiye eden bir yazılım prensibidir. Bu yaklaşımla bazen 100 satır tutan bir işlemi kendi içinde daha küçük fonksiyonlara ayırmamız tavsiye olunur. YAGNI ise ihtiyacımız olmayan şeyleri sisteme dahil etmemeyi söyleyen bir prensiptir. DRY kendini tekrar etmemeyi tavsiye eden bir prensiptir. Bu konuyla ilgili yazılmış pek çok makale bulabilirsiniz.
SOLID, 5 prensibin birleşmesinden oluşan bir yaklaşım bütünüdür. S harfi Single Responsibility (Tek Sorumluluk) anlamına gelmektedir. Bir metodun sadece tek sorumluluğunun olması anlamına gelmektedir. Örneğin bir e-posta gönderim sınıfı sadece e-posta gönderme işlemlerini içermelidir. Örneğin hem e-posta gönderiyor hem de yanında SMS gönderiyorsa aslında iki işi birden yapıyor demektir. SOLID’in diğer prensiplerini anlamak, biraz daha fazla OOP ile tecrübeli olmayı gerektirmektedir.
MVC Model, View, Controller kelimelerinin birleşmesinden oluşmuş bir uygulama tasarım desenidir. Üstteki örnekte aslında HTML kodlarını PHP kodlarından ayırarak bu konuya da biraz girmiş olduk.
PHP Framework (Çatı) kullanmak veya kullanmamak
PHP için yazılmış pek çok framework bulunmaktadır. Framework’ler “geliştiricilerin hazırladıkları projeleri için ihtiyaç duyduğu PHP kodlarını tek bir çatı altında birleştiren kütüphanelere verilen isimdir”. “PHP framework’ler temelinde en çok kullanılan modülleri barındırır. Projenizin daha düzenli olmasını sağlayarak veritabanı bağlantıları ve yetkilendirme modülleri gibi temel bölümleri tekrar tekrar yazmanızın önüne geçer.”
PHP için yazılmış çok fazla sayıda framework bulunmaktadır. PHP Framework seçerken ne için kullanacağınıza, müşterinin isteklerine, sürüm güncelleme hızına, LTS (Uzun Süreli Destek) sürüm desteğinin olup olmadığına dikkat etmek gerekiyor. Gözlemlediğim kadarıyla yoğun şekilde Laravel geliştiricisi aranmaktadır ve en popüler PHP Framework konumundadır. Symfony, Phalcon, CakePHP, CodeIgniter, Yii gibi daha pek çok PHP framework bulunmaktadır.
Framework ile kod yazmak özgürlük alanınızı daraltabilir veya ufkunuzu açabilir. Geri uyumluluk konusunda Symfony daha başarılı görünmektedir. Hem Symfony hem de Laravel’in LTS denilen uzun süre desteklenen sürümleri bulunmaktadır.
PHP ile yazılmış özgür yazılımları tanımak
PHP ile yazılmış çok sayıda CMS (İçerik Yönetim Sistemi) bulunmaktadır. WordPress, dünyadaki en yaygın içerik sistemidir ve tek başına pazarın %76.4’üne hâkimdir. Drupal (1 milyon sitede kullanılmaktadır) ve Joomla bunların çok bilinenleridir. PHP ile yazılmış WooCommerce, PrestaShop, OpenCart gibi e-ticaret siteleri de bulunmaktadır. Yeni bir forum sistemi yazmaya sakın çalışmayın! SMF ve phpBB gibi forum sistemlerini kullanabilirsiniz.
Güvenli kod yazmak
Yazdığınız kod ne kadar güvenli? Bunu öğrenmek için hacker’ların sitenize saldırmasına gerek yok. PHP ile güvenli kod yazmak için çok çeşitli makaleler bulunmaktadır. Kullanıcıdan gelen hiçbir veriye güvenmemek, düzgün şekilde doğrulamak, düzgün şekilde temizlemek, temizlemeden ekrana basmamak bunların arasındadır.
Temiz kod yazmak
PHP ile pek çok şekilde kod yazılabilmektedir. Ekipler büyüdükçe kod okunabilirliğini konusu daha da önemli hale gelmektedir. PHP için hazırlanmış temiz kod makalesine mutlaka bakın. PHP ile kod yazmak ile ilgili PSR-12 diye bir standart da yayınlanmıştır. Standartlara uymak daima faydalıdır.