Hicte ilginizi cekmeyen ve hemencecik adsense paralarini cukka etmenizi saglamayan yazi dizimizin ikinci yazisindayiz. PHP'yi iki haftada cozup ise de giremeyeceginizi ogrendiginize gore bu yukardakiler hakkinda ciddi hazirliklar, ogrenme surecleri yaptiniz diyelim. Peki simdi PHP ile ilgili ne yapacaksaniz.

PHP bir scripting dili. Yani calismak icin ( eger executable olarak derlenmediyse ) bir yorumlayiciya ihtiyaci var. Iste PHP dedigimiz sey o yorumlayici programin kendisi. PHP calistiran hosting diye de biliyor olabilirsiniz. PHP bir core ve etrafinda saz arkadaslari (extensions) olan bir program. Bakin yine dependency yani bagimli paket yonetimi ile karsilastik.

Genelde debian ve turevi ubuntu gibi sistemlerde apt-get install php5 diyip yukleyebilirsiniz. Sonra extensionlari yuklemek icin apt-get install php5-curl php5-mcrypt vb. diyebilirsiniz. Bu sekilde linux sisteminiz PHP ozelliklerini kazanir. Zaten siz paket kurmayi linux ogrenirken cozmustunuz. Simdi bir de PHP'nin apache ile konusmasini saglamak icin libapache2-mod-php5 paketi kurmak sizi yoracak bir is degil.

PHP bir suredir ( ben 15 yildir kullaniyorum ) built-in server diye bir ic sunucuya sahip. Bunu da terminalde php -S localhost:8000 gibi tetikleyip aktif edebiliyorsunuz. Fakat bu durumda apache2 veya nginx gibi sunucularin kutuklerinde tanimlayabileceginiz on degiskenler,loglar veya izin ayarlarini ayarlayamaz ve saglikli bir sunucu yayini yapamazsiniz. Bu yuzden linux ogrenirken apache2 ve nginx ogrenmis olmaniz cok iyi olacakti. Cok buyuk bir is degil korkmayin. Bir iki dizin tanimi o kadar.

PHP ile beraber filecache modasinin coktan gectigini hatirlatip redis vb. bir cache database ogrenmeniz iyi olur onu da hatirlatayim. ( benim tavsiyem Redis)

Simdi buraya kadarki bolumlerde anlattigim seyler artik python, ruby, nodejs, scala da ogrenseniz hemen hemen benzer isler. Bazen ruby'de oldugu uzere composer turevi paket yoneticisi gem otomatik yuklu gelir yuklemezsiniz, bazen de c# icin framework zaten default vardir.

PHP naz eder
PHP nazli bir dildir. Ornegin bir fonsiyonu ile bir degiskende bir yazi sinirlayacaksiniz. Buradaki aranacak, yeni hedef ve degiken siralamasi baska bir fonsiyonunda yer degistirebilir. Bu ciddi elestri alan yanlarindan ve haklida bence insanlar. Fonsiyon isimlerinde ve saz arkadasi extension fonksiyonlarinda cidden bir standart karmasasi var. Bu yuzden kendinizi PHP Storm gibi bir IDE ile desteklemeniz oldukca isinize yarayacaktir.

ECHO, IF, WHILE, FOREACH vb. ivir zivirlar bu isin alfabesidir. Bunlari ogrenin. Iyi ogrenin. Akabinde atama operatorleri hakkinda bilginizi arttirin. Sonra diziler ve data objeleri hakkinda denemeler yapin. Diziler cok onemli beyler. Dizisiz adam akilli data kapsulleyip aktaramaz, databaseden gelen matrisleri duzgun okuyamazsiniz. Komutlar alfabe ise dizilerde sifat, ozne, yuklem gibi biraz basitte olsa isin grammeri diyebiliriz. Onlari sevin sayin.

Function yazin. Bol yazin. Baslarda functionlar ile islerinizi nasil kisalttiginizi gorun. Sonra daha cok function ile basiniz agrimaya baslasin. O neydi bu neydi karistirin. Kod aciklama satirlarini sik kullanin. Sanki baskasi okuyacak gibi yorum yazin.

PSR Standartlari

Internette bir belge geziyor. FIG diye bir grup mu nedir bir kod standardi cikardilar. Guzel isler. Tab yerine bosluk olsun, parantez acilsin, thernatory ( kisa if ) soyle yazilsin falan diyorlar. Aslinda bu adamlarin dedikleri kodu yazana degil okuyacak adama yariyor. O yuzden onemli. Github'ta reponuza bir pull request geldiginde dur cekeyim makine merge edip okuyayim diyemeyebilirsiniz. O yuzden duzgun yazilmis kodu githubda okumak daha rahat olacaksa boyle standartlara ihtiyacimiz var. Ben ekipte cok kasmadim ama muhim mesele goz atin anlayin lutfen.

Object Oriented Programming
Pek cok isinizi bu tur bir programlama yapmadan PHP ile yaparsiniz. Fakat is biraz daha buyuyecek ve birden cok programci calisaksa orada bir nesne dunyasina goz atmali. Class, instance, method gibi kavramlari anlatin. Sonra inheritance, polymorphizm gibi temel object oriented kavramlarini cozun. Global, yerel, sinif degiskeni nedir anlayin. Bence PHP'de uygulamasi zor olsa da SOLID prensipleri mutlaka uyulmali. Onlara bakmalisiniz. Akabinde OOP icinde bazi oturmus kaliplar oldugunu farkedebilirsiniz. Bunlar desing patternler. Decorator, Factory vb. bir takim standart kod yapilari var. Bunlar yillarin tecrubesi ile olusturulmus ve cok iyi yapsaniz ortaya yine bu cikiyor OOP icinde diyebiliriz. O yuzden OOP yapilarinizi bu patternlari anlayarak daha mukemmel yapacaginizi hatirlatayim.

Test Driven Development ve digerleri
Isler buyudu. Koskoca garanti bankasinin tum sistemini aldiniz yaziyorsunuz. Nesneler classlar dolarlar havada ucuyor. Paralari say say diyorsunuz fakat bir bug var. Arkadas hangi senaryoda cikiyor bu bug bulamiyorsunuz. Iste orada bu isin basinda bir hata yaptik galiba diyebilirsiniz. Koca ekip is duruyor dusunsenize masrafi. Boyle buyuk islerde hayati kolaylastirmak icin iste once testi yaz sonra onu gececek kodu yaz demisler. Aslinda bu surec programcilara algoritmayi daha iyi anlatma yolu. Tam anlatma demiyorum cunku testleride bir programci yaziyor nihayetinde. Umarim hem testi hem kodu yazmak zorunda kalmazsiniz. Cok yorabilecek bir is cunku. Bence kodu yazmak daha eglenceli. Testler turlu turlu. Birisi Unit test ( PHP Unit iyidir ) otekisi Behavior Testleri. Ayrica bunlarin hepsi bir araya gelip aslinda bir Acceptance Test olusturmus oluyorlar. Muhtemelen buralara gelmeden programciligi birakacaksaniz. Fakat asil heyecan buralarda basliyor

Framework Meselesi
OOP iyi guzel, TDD yazdiniz aldiniz yurudunuz fakat ise her aldiginiz adama bir yazilim yapisi dokumantasyonu anlatmak yoruyor sizi. Kadere bak ki document driven development yapmadiniz ve once dokumani sonra testi sonra kodu da yazmadiniz. O kadar finans zaten yoktu firmada. Is cikacakti maglum burasi Turkiye. Iste o zaman bilindik yapilar ustunden adam aranmaya baslanir. OOP'nin MVC vb yapilara nasil uygulandigini iyi standardize eden yapilara framework diyoruz.

Framework meselesi oldukca cafcafli bir mesela. Zira PHP dunyasi bos adamin bol oldugu ve ogrendigi ilk dilde kendini kanitlamak icin yanip tutusan adamlarin dunyasi. Onune gelen bir MVC framework patlatir.

CodeIgniter, CakePHP, Laravel, Zend, Symfony. Yii ilk anda aklima gelenler ama PHP dunyasi bu konuda cok genis. Hatta performansi makine diline yakindasayip kazaniriz diyen ve PHP extension framework yazan ( benim hiiiic desteklemedigim ) Phalcon gibi fwlerde var. Isi cok karmasiklastiran Flow3 gibi pek cogunuzun duymadigi alman isi yapilarda var. Ben kendi adima PHP dunyasi icin Symfony ve Silex diyorum. Fakat siz Kariyer.netteki ilanlarda bol bol Laravel goruyorsunuz. O da sektorumuzun bana gore sigligi, populer kulturun halt etmesi.

Laravel tayfasi ve kankileri envatocular. Burada bir uyari yapayim. Bu arkadaslar zamaninda wordpress vb. sistemlerin temasini plugini sata sata ( ki hala oyle ) zengin oldular. Cakma ajans programcilari veya tasarimcilari hosting panelinden wordpress kurup sonra icine theme, plugin ekleyip musterilerine janjanli fiyatlardan satip nasilda isler yaptik diye eglendi bunlar sayesinde. Fakat bunlar bos durmayip pazari genisletmek icin bir atak yaptilar. Adi da Laravel framework. Aslinda PHPnin kendisinin de yaptigi uzere tamamen taklite donuk bir yapiydi ama oyle cafcaflayip sundularki Laravelle her isi yaparim abiciler cikti ortaya. Sonra saniyorum 5. surumde isler 4. surumdeki gibi olmayinca bir kitle kaybi yasadi. Bunlari anlatmamin nedeni neden sana gore laravel degil demeyin diye. Bu frameworkten para kazanma isini daha usturuklu ve mantikli konseptte yapan ise Symfony oldu. Hem arkasina bir firma, egitim destegi koydu. Hem de dogru duzgun yapisini composer gibi araclarla saglikli sekilde desteklemeyi basardi. Ozetle PHP temel komutlari sonrasinda hic bir MVC yapisi framework ogrenmeyip hemen Symfony'e daliyorsunuz. Biraz ilerleyip dependency injection veya service nedir ogrenince ardindan Silex neymis diyorsunuz. Zaten icerlerinde doctrine ORM ile karsilacaksiniz. Kocaman bir ORM'in aative cache desteginin Redise bir kac yml dosyasindaki ayarla nasil baglandigini gorecek uuu baby diyeceksiniz. Bunlar PHP dunyasi icinde en kallavi ve is goren yapilar su anda. Zend super, Yii harikacilara aldanmiyorsunuz. Bu ikisi ile PHP kullanacaginiz her boyutta isinizi yaparsiniz.

Bu iki yazida PHP ogrenirken ve isler ilerlediginde basiniza neler gelecegine dair size alternatif bir bakis acisi kazandirmaya calistim. Fakat isler bunlarla bitmiyor. Deginmedigim veya bilmedigim cok konu da var ama suraya yazdigim satirlarin anlamlarini ogrenmek ve bir proje icinde denemek yillarinizi alir arkadaslar. Aslinda bence. 10 yil sonra geriye donup baktiginizda nereden nereye geldinizi gorur buyuk isler yapmaya olan gercek cesaretiniz artar.

Simdi gelelim asil neden BASLAMAYIN dedigim yere. Cunku burada anlattigim kavramlar esliginde ( symfony'i rails, silex'i sinatra olarak degistirin ) Ruby ogrenin. Ayni surecler ayni ogrenme metodu zaten. Fakat dilin kullanilabilirligi bence bir harika. Isterseniz once PHP ogrenin para kazanicam diyorsaniz sonra Ruby ogrenin. Ama 10 yil sonra bile olsa Ruby ogrenin derim. Cok canavar bir dil ve framework. Ayrica kitlesi de cok zeki insanlardan olusuyor.

Surcu lisan ettiysem affola mi deniyordu ?

Kalin saglicakla...