Prije nego načnem temu iz naslova, ispričao bih se zbog mogućih pravopisnih pogrešaka. Iskreno, ne sjećam se kada sam posljednji put napisao članak, post, ili što već na hrvatskom jeziku. English is my thing :)
Osvrnimo se sada na programski jezik zvan PHP. Svatko tko se bavi razvojem web aplikacija zasigurno je čuo za PHP (ukoliko nekoliko posljednjih godina nije proveo u...). Ukoliko u Google tražilicu upišete riječ "php" dobit ćete približno 10.010.000.000 rezultata. Što se u odnosu na "ruby" pretragu od 96.200.000 i "python" pretragu od 66.800.000 rezultata čini kao iznimno impresivna brojka.
Postavlja se pitanje, što PHP čini popularnim. Jedno od najčešćih odgovora koje će te dobiti jest kako je PHP iznimno lagan za naučit. Moj odgovor na taj odgovor, smjeh!
PHP, kao niti jedan drugi jezik nije lagan za naučit. Lagan je iskusnom programeru koji radi prijelaz s jednog na drugi programski jezik, ali početniku ne. Zapravo, usudio bih se reći kako je PHP jedan od težih jezika za svladati.
Svatko je u stanju u pet minuta naučiti <?php echo 'Hello world'; ?>. Ako je to mjerilo učinje, onda da, lagan je. No PHP se od verzije 4 a pogotovo 5 hvali sa OOP podrškom. Za neupučene, Object Oriented Programming. Po mom skromnom mišljenju PHP i OOP su blago rečeno gorka kombinacija. PHP je započeo kao proceduralni jezik. Njegova trenuta podrška OOP-u je, blago rečeno, srednja žalost.
No vratimo se na "mjerilo težine učenja". Ukoliko kao ja imate iskustva sa MS Visual Studio i npr. C# programskim jezikom tada shvačate koliko koristna može biti Code Completion funkcionalnost što se samog IDE rješenja tiće te strongly typed osobona jezika koju ima C# primjerice. PHP je loosely typed programski jezik. Što znaći da informacija koju spremamo u varijablu može biti u jednom trenutku jednog tipa a u drugom trenutku nekog trugog tipa. Ovo je onaj dio koji ga čini "laganim za naučiti". Početnicima će se svidjeti ova "osobina" jer nisu svjesni njezinih mana. Tim više što varijablu nije potrebno deklarirati prije korištenja. PHP-u je svejedno što stavite u varijablu te kako "presipavate" varijable iz jedne u drugu, on će sam za vas odraditi "type casting". Ovo se u dobroj večini slučajeva ne manifestira kao problem jer rjetko kada čete naići na slučaj da "type casting" koji je PHP odradio nije onaj koji ste htjeli. Sve ovo je transparentno korisniku (developeru) stoga ako ste početnik na ovo niti ne obračate pažnju. Cool, zar ne? Ne! Sve ovo, vodi do kasnijih glavobolja kada je u pitanju debugging. Siguran sam da će se velika večina iskusnih PHP developera složiti kako je debugging nepoznanica, da ne kažem nula, u svijetu PHP-a. Barem kada se usporedi s onim kojeg imate u strongly typed jezicima poput C# (uz pomoć Visual Studia).
Debugging je jedan od najbitnih koraka u procesu razvoja apliakcije. PHP za sada nije "najsretnije" uhvatio taj korak.
Osvrnimo se sada na "function return type". Još jedna od nepoznanica ovog open source programskog jezika. U PHP je dozvoljeno napisati funkciju tipa
Nedostatak deklaracije tipa funkcije jedan je od največih nedostataka PHP-a. Ne možete biti sigurni u tip rezultata funkcije ukoliko ona nema deklaraciju povratnog tipa. Gore navedeni primjer pokazuje i zašto. U primjeru su jasno navedene situacije gdje sam u suštini sam naveo povratni tip nakon svakog return-a. No zamislite da sam radio "return $sommeInnerFunctionVariable" gdje je $sommeInnerFunctionVariable varijabla koja je rezultat nekakvih operacija unutar funkcije.
Ukoliko se niste dobro ogradili, vaša $sommeInnerFunctionVariable može poprimiti različite tipove te ako kasnije u kodu raditi stvari poput "if(doSomething('branko') === $someOtherVariable)..." tada postoji mogučnost da će se vaš kod slomiti, a najgore od svega nećete dobiti pogrešku. Ovakve greške zbog lošeg dizajna samog jezika iznimno su teške za uoćiti te vam mogu oduzeti iznimno puno vremena. Većina programera i dalje korsiti PHP-ove built-in funkcije var_dump i print_r za debugging. Ovakav način debugiranja je iznimno spor i nepraktičan.
Postoji par rješenja dostupnih na tržištu, no velika večina ih nije truda vrijedna jer ne obavljaju debuging kako treba. XDebug, PHPDebug... srednja žalost, Apache vam puca, loša, gotovo nikakva, implementacija u IDE rješenja (kojih je ionako za na prste jedne ruke).
Nedostatak "namespace"-a. Još jedna od boljki PHP-a. Namespace-i su iznimno korisna i neophodna stvar ukoliko želimo posati lako održivi kod. Lako održivi kod je s druge strane preduvjet kvalitetnom razvoju enterprise aplikacija. U PHP-u sve funkcije se nalaze u "jednom" namespace-u, što znaći da ukoliko se moja funckcija zove doSomething tada se niti jedna druga funkcija koju zovemo iz neke vanjske datoteke putem include-a or require-a ne smije zvati doSomething. Dio problema rješene je uvođenjem OOP podrške te ste u mogučnosti napisati nešto poput dolje navedenog.
PHP u verziji 6 najavljuje ispravak većine nabrojanih problema. No budimo realni, PHP je u startu građen kao proceduralni jezik, sve najavljene nadogradnje neće ga prestati činiti proceduralnim. Činjenica da vam je dozvoljeno pisati kombinaciju proceduralnog i OOP koda može ućiniti sretnim samo početnike, tj. one kojima se "prodaje" kako je PHP lagan za naučiti.
Jedna od "filozofija" dobrog dijela PHP developera jest, ne treba nam framework. Pišem kod i struktuiram aplikaciu kako ja hoću. Razmišljanja poput ovog dovela su principa "izmišljanja tople vode" gdje developeri iznova i iznova pišu kod za stvari koje su prije njih napisali drugi developeri nebrojeno puta. Uzmimo primjerice običnu file upload formu. Večina iskusnih developera napisala ju je iznova barem 5-10 puta. Nedostatak tog "one framework" principa za sobom povlaći nedostatak "komponenti" dostupnih za PHP. U ASP.Net-u primjerice, koji se zasniva na principu komponenata, postoji komponenta File upload koju je dobvoljno pozvati u kod i podesiti joj svega par property-a ne bi li bila funkcionalna. Opet, ovo čini kod daleko preglednijim i održivijim.
Što mislite zbog čega je Ruby popularan? Sigurno ne zbog samog jezika, već RoR-a. Doslovce jedan jedini framework u kojem svi rade. Doduše u posljednje vrijeme i tu se pojavljuju razno razna framework rješenje. No rezultat je isti, rad s frameworkom = struktuirane aplikacije, održiv kod, komponente.
Što se održivosti koda tiće, principa komponenti te debugiranja i ostalih business code-ing bitnih stvari tiće, PHP ima još velik put pred sobom. Do tada, ostaje nam na osloniti se na PHP framework-e kao što su ZendFramework, CodeIgniter, PHPCake, Symphone i sl. koji izlaće maksimum iz PHP-a.
Pravo pitanje je koliko je pametno graditi OOP temeljene aplikacije na jednom ovako "mutiranom" jeziku kao što je PHP u kojemu se isprepliću proceduralni i OOP kod?
Trenutno jedna od najbolje napisanih open source PHP temeljenih aplikacija je Magento, ecommerce platforma. Preporućio bih svima da si ju skinu s neta te pregledaju kod. Zatim usporedite taj kod sa kodom trenutno najpopularnije blog platforme, WordPress-a. WordPress je jedan od najboljih primjera "mutiranog" koda, u kojem se isprepliću proceduralni i OOP kod.
Nadam se da nisam bio previše kritičan prema PHP-u. Što ga više znate, to ga više volite i mrzite u isto vrijeme. Veselim se vašim komentarima, nadam se dobro argumentiranim.
nekad je is_numeric(), prema toj logici bi trebalo biti is_set() ? - Nije
Tako nekako sam i ja mislio dok nisam procitao objasnjenje. "isset" je tzv. "language construct" za razliku od "is_numeric" koji je funkcija, pa zato imaju drugaciju konvenciju imenovanja.
Jest, zbunjujuce je ... i ja bi radije da je is_set. 
A sad malo o clanku (vec sam napisao post, al mi ga je "pojelo"
). Ja ga necu pohvaliti, evo za promjenu malo kritika. 
Prva stvar koja mi je upala u oko u clanku, a za koju mislim da nije ispravna jest - usporedjivanje PHP-a sa ASP.net-om i RoR-om. Mislim da to nije za usporedbu, zato jer je PHP jezik, a ovo dvoje su frameworci. Sa njih dvoje se moze usporediti npr. Zend-ovim framework-om. 
Nadalje, C# nije lako nauciti (kao niti jedan drugi jezik). Lako je nauciti "drag&drop" kontrola, petlje i uvjete (koji se ionako znaju iz drugih programskih jezika, a ako se ne znaju biti ce jednako "teske" za nauciti u bilo kojem programskom jeziku) ... a ako imas programerskog iskustva, lako je nauciti sintaksu jezika (vise manje, bilo kojeg). Medjutim, objektno orijentirano nauciti raditi kompleksne stvari u C#-u je ... tesko. Nemoj me krivo shvatiti. I u PHP-u je isto tesko (iako, zbog drugih stvari), bez obzira sta je njegov OOP relativno jednostavan. Al za razliku od C#, PHP je skriptni jezik. Ti svaku skriptu mozes debuggirati (sa losim debuggerima
) ... pratiti svaku liniju i tako skuziti "sta je pjesnik htio reci". To u C# ne mozes. Ima dokumentacija, naravno. Ali iz dokumentacije jednostavno ne mozes shvatiti svaku klasu i svaku funkciju. Osim ako nisi genije sa darom prorokovanja. 
Uglavnom ... ta dva jezika imaju svojih prednosti i mana. Nekom ce se svidit PHP, nekom C#. Dal je PHP lose dizajniran jezik? Mislim da nije. Da je lose dizajniran, siguran sam da ne bi bio toliko popularan. "Sloboda" varijabli nije losa (npr. i Javascript ima istu stvar, mozda cak i gore napravljenu od PHP-a), nego moze biti potencijalno losa. Jednostavno, covjek koji radi u PHP-u je vise slobodniji, ali i vise odgovorniji od npr. C# programera.
Cinjenica je da nije toliko usminkan kao C# (sta i nije cudo, pa pricamo o Microsoftovom proizvodu
) i da vjerovatno ima nekih mana. Ali se moramo zapitati jesu to stvarno mane ... ili su to nasi ukusi? 
Nadalje ... "ne trebaju na frameworci" ... odakle ti to? Ja osobno to prvi put cujem. A puno puta sam cuo "koji PHP framework" preporucujes. Ili sam cak vidio ljude koje su sami dosli do toga da im nesto poput MVC pristupa treba.
Za debuggiranje stoji. Ja bi jos dodao da nema kvalitetnog IDE-a za PHP. Tu C# i ASP.net totalno rasturaju PHP (a vjerovatno i sve ostale jezike).
Vidio sam na jednom sajtu usporedbe frameworka (ZF, RoR i ASp.net) na kojem su prikazani brzina razvoja, odrzavanje, prosirivanje i jos par stvari. Svi su bili tu negdje. Jedan je nesto bolje imao, jedan nesto gore. Tako da, cak i frameworci su izgleda stvar ukusa. 
Sve u svemu mislim da je clanak prekritican prema PHP-u.
(znam, znam ... nadrobio sam svega i svacega, al nedjelja je, nista ne radim, pa pisem, skuzajte
)
Pozdrav, Ivan 
Ja sam dosta dugo tražio odgovarajući server side jezik koji bi zadovoljio moje apetite jer pošto dolazim iz OOP backgrounda ne odgovara mi to što nema strong typing i što se za svaku funkciju ne može odrediti što vraća. Također mi ne odgovara što drugi jezici recimo kao Java, CF, te C# vrte se u svojem okruženju što im omogučava da budu daleko napredniji od PHP koji je gost na Apache-u. No prihvatio sam jezik takav kakav jest, nažalost zbog nekih stvari lako se slomi OOP i situacija u kojoj se preko include na najvišem dokumentu, includana klasa može pozivati u svim nižim dokumentima a da se ne napravi include (import) stvarno nije OK. Ali to je dio PHP i on jednostavno nije full OOP jezik niti će biti i to se mora prihvatiti.
Ima jedan komponent based framework zove se PRADO i ima solidan broj komponenta ali dokumentacija je loša tako da je rad s tim frameworkom malo naporan i nije baš početnik frendly kao neki drugi frameworki.
No postoje web aplikacije kojima je namjenjen php i tu mislim zbog silne mase developera mu nema ravna.
Jeben post... U početku sam se mislio "Joj šta ga je ovaj izasro" Ključni je drugi dio posta... Lijepo si rekao, volim ovakav stav 
Pošto sam početnik u PHP-u ovaj post mi je dao dobar uvik u neke stvari.. TNX
Drago mi je ti je zapao za oko 
Naslov "pregažen vremenom" je više zbog WTF efekta 
Poanta je što doslovce živim od PHP-a i open sourca. Samo ne volim onaj stav kod nekih developera, "moj jezik je naj sve drugo sucks". Treba biti realan i racionalan. PHP je full popularan i sigurno neće izumrijeti i uvjeren sam da će mu popularnost i dalje rasti i da će ga se usavršavati itd itd.... No činjenica je da je loše dizajniran kao jezik i to je to. U usporedbi sa C# je ... igračka. No igračka koju mnooooogi vole i od koje mnooogi žive.
Pozdrav svim developerima iz open source svijeta...
Članak za 5+. Stvarno si piknuo tamo gdje rijetko 'ko ode
ali živa istina, PHP ima puno nedostataka koji ga čine jako lošim. Još neke od njih su to što kad je riječ do funkcija, one su case insensitive. Npr.
function doSomething() {
return 'nekaj';
}
echo DoSoMEthIng();