Učenje PHP-a :)

Pozdrav,

cvrsto sam odlucio da krenem sa ucenjem PHP-a buduci da je on sveobuhvatniji alat za izradu raznih web aplikacija. Imam tek 15 godina i nemojte govoriti kako to do sad nisam naucio.

Dakle zanima me odakle da krenem, sta prvo trebam da naucim, gdje da nadjem kvalitetne tutorijale (balkanski jezici dobrodošli zbog raznih engleskih fraza)?

Nadam se dobrim odgovorima.

Unaprijed hvala!

Najbolji savjet koji ti mogu dati (koji bi poželio da mi je netko dao kad sam imao 15) je: uči python / django framework.

Možda ćeš se malčice više namučiti, ali će ti se jako isplatiti kasnije, a uvijek moraš dugoročno gledati.

1 Like

najbolje ti je počet sa MySQL-om

Prvo nauči osnove, tipa echo print function itd… Posle kreni na komplikovanije, klase oop pokretanje shell-a. Kada sve to naučiš, onda kreni na MySQL. Posle MySQL-a… Imaćeš posao.
Ali nikada nemoj prestajati sa učenjem

Dobro kaze Gosaric, ali da bi razumio kako framework radi, moras savladati osnove programiranja, pa onda oop.

Odustao već… :slight_smile:

Ma samo ti uci PHP, kako radi, sto je framework, kako radi framework, sto je ui, kako ga sklopit sa php-om, kako povezati php sa bazama podataka, onda predji na klase i objektno orjentirano programiranje.

Malčice krivi workflow. Php + mysql osnove = put prema nečemu.

(Ipak python uzmi)

[quote=“Gosaric”]Malčice krivi workflow. Php + mysql osnove = put prema nečemu.

(Ipak python uzmi)[/quote]

Za početak je svjedno izabere koji jezik izabere, posebno ako bira između php i pytona. Ja bih možda ipak preporučio PHP zbog gotovo isključivo orijetiranosti web programiranju, klasičnije sintakse i dostupne literature na hrvatskom.

Ako autoru teme nije problem engleski jezik i ipak bi probao sa pytonom, preporučam seriju predavanja o osnovama programiranja koje je postao tsereg

http://www.webmajstori.net/forum/showthread.php?t=32990

[quote=“eke777”]Za početak je svjedno izabere koji jezik izabere, posebno ako bira između php i pytona. Ja bih možda ipak preporučio PHP zbog gotovo isključivo orijetiranosti web programiranju, klasičnije sintakse i dostupne literature na hrvatskom.

Ako autoru teme nije problem engleski jezik i ipak bi probao sa pytonom, preporučam seriju predavanja o osnovama programiranja koje je postao tsereg

http://www.webmajstori.net/forum/showthread.php?t=32990
[/quote]

Potpisujem ovo, čovjek ti je sve dobro rekao.

[quote=“eke777”]Za početak je svjedno izabere koji jezik izabere, posebno ako bira između php i pytona. Ja bih možda ipak preporučio PHP zbog gotovo isključivo orijetiranosti web programiranju, klasičnije sintakse i dostupne literature na hrvatskom.
[/quote]

“Klasičnija sintaksa” mislim da ima i termin zove se c-like jezik (c,c++,java,php, actionscript,javascript,c# itd.). Neznam jeli to samo žargon, jezik ulice, ili to je stručan termin.

PHP nije isključivo OOP već nasuprot OOP u PHP je proširenje PHP.
Niti danas danas nije moguće išta napraviti u OOP koristeći full OOP pristup jer moraš koristiti funkcije jezika, a funkcije ne vraćaju objekt.
Array u php kakav se koristi nije objekt, niti string nije objekt. Da bi bio full OOP jezik morao bi cijelo vrijeme raditi sa objektima, dok to u PHP nije slučaj.

OOP učiti kroz PHP nije najbolje rješenje i puno bolje je imati predznanje iz nekog full OOP jezika.
Mislim da je puno bolje naučiti neki drugi jezik gdje je lakše uhvatiti osnove pa se prebaciti u php (naravno da jezik bude c-like) jer php zna biti dosta naporan na početku jer je previše tehnologija u pitanju (baze,html, sad i ajax).

Možeš li molim te objasniti ovo?

Neznam dali sam to sanjao ali prije koju godinu sam naletio na array objekt u php.
Odustao od njega jer se njime nije moglo očekivano isto ponašanje kao i sadašnjeg arraya.

E sad da bi bio full oop jezik ti moraš cijelo vrijeme raditi sa objektima što u PHP nije slučaj.
Neke funkcije nemaju OOP pristup, recimo socket, session itd.
Ti u biti se radom sa tim funkcijama prebacuješ na proceduralno programiranje.
Većina frameworka da bi to izbjegla radi wrapper klase.

Kad radiš sa stringom ti ne radiš sa objektom. Tebi trebaju funkcije da bi mogao nešto učiniti sa tim stringom.
Recimo strlen($string) za izračunavanje duljine.
Da je taj string objekt ti bi podatak o duljini dohvaćao na sljedeći način $string->getLength().

Evo slična situacija u Javi i kako su oni to riješili pošto je java full OOP:

Zato i pišem da PHP nije najbolje rješenje za učenje OOP. OOP ima tri osnovna svojstva a to je enkapuslacija, nasljeđivanje i polimorfizam.
Ovo treće iako je jedno od najvažnijih pravu primjenu je u PHP teško i objasniti i shvatiti. Pogotovo developerima koji su naučeni ako nešto radi dobro je.
Mislim oni mogu naučiti definiciju ali problem je u primjeni. Možeš ti naštrebati kako voziti formulu 1, zar ne.
U OOP ne postoji pravilan način, postoji praksa, a sreo sam ljude koji imaju OOP PHP u malom ljevom prstu a nisu sposobni napisati dvije klase u međusobnom odnosu da liče na nešto. Eto ako učite OOP u PHP nemojte to raditi. Važno je znati što je što ali bez prakse…

I danas kad se traži posao a uvijet je poznavanje OOP, onda na tvoj odgovor da znaš OOP će samo kimnuti glavom, već ćeš i morati dokazati da znaš OOP, ali ne OOP koji vrijedi u PHP, već da znaš OOP.

Često je i taj OOP u PHP ništo drugo nego da se filtriraju kandidati jer onaj tko zna OOP daj kao da zna sve:)

Firme koje su godinama na tržištu često rade u starijim kodu, proceduralni pristup ali forsiraju OOP kao uvijet za zaposlenje i onda dolazi do toga da mladi ljudi se zaletavaju sa OOP, glavno je napisati tri klase, nešto primjeniti i to je to.

A zašto OOP i to čim kvalitetniji, zato jer smanjuje moguću štetu u budučnosti. Saniranje te štete i lakše održavanje.
Kao što sam pisao u jednoj nedavnoj temi Fejsbuk je prepoznao da software ključ za uštetu, prepoznati će i drugi. Tražiti po webu tko je danas jeftniji hoster je normalna stvar dok rekurzivna petlja radi preko 100 querija u jednoj sekundi.
No stvari se, nadam se mjenjaju.
I kad sam naletio na takav slučaj na jednom projetku i to spomenuo, dobio sam odgovor, ćemu trošiti vrijeme, to se udara jednom dnevno i puca u cashe.
E sad takvih stvari ima stotine, to je filozofija iza software koji je napravljen.

I to je isto jedna važna stvar kod učenja programiranja. Ne možeš tu raditi nešto kako bi trebalo biti a tamo na drugom mjestu izvađat gluposti. I proces učenja je dug, meni su trebale godine da počnem formatirati kod i to nisam počeo zbog sebe, već kad sam radio sa drugima, bio je snažan pritisak da kod bude formatiran kako spada.

Danas je čest savjet koristiti frameworce u vezi učenja OOP u PHP. Oni su odlični, no za učenje praktične primjene.
Oni, ne daju neki pregled punih mogučnosti OOP i neki širok pregled rješavanja problema. Većina njih ima sličan ili isti dizajn i i radi se “samo” o prokušanim OOP receptima.

Kad sam učio OOP i prolazio desing patterne i pokušao sam izraditi Command Pattern.
Potrošio sam tjedan dana i shvatio da sam zamjenio ulogu Recivera i Invokera i da mi zbog toga cijela aplikacija nije bila u skladu sa OOP načelima.
Danas se nakon tjedan učenja PHP OOP počinju pisati PHP OOP library. Znam da se nema vremena, ali neko određeno vrijeme ipak treba učiti.
I na tom primjeru sam naučio jednu važnu lekciju.
Da tokom dizajniranja rješenja ili korištenja patterna, važno je uočiti što je što.
Ne samo prekopirati funkcionalnost, već uoćiti koji je su ključne klase, te njihove uloge.
A sa pristupom, napisao sam klasu, tu sam napisao klasu i tu sam napisao klasu toga naravno nema, nama niti OOP.

I za svoj sljedeći projekt kad ću ga raditi uzeti ću YII framework. Autor toga frameworka je napisao PRADO framework koji ima totalno drugačiji pristup razvoju PHP web aplikacija, tako da i u YII frameworku očekujem nešto novo, a ne već prokušane recepte i nadam se da ću nešto naučiti.

Većina developera kad radi nešto u PHP OOP radi na temelju svojeg iskustva sa frameworcima (pa čak i ja, i iskustva iz PHP frameworka sam znao primjenjivati i kod klijent side tehnologija). Ali oni su to što jesu frameworci, oni nisu prigodni za rješavanje konkretnih problema, i onda iako se dobije dobar kod, dobiju se glomazna, komplicirana rješenja ili se to izbjegne pa se pribjegne jednostavnosti i zanemarivanju OOP načela.
A baš ta sitnica koja fali u toj priči (konkretno, kvaliteno rješenje) se “pokušava” koristiti u drugim full OOP jezicima tipa C# ili Java.

Nedavno u jednoj temi napisao jednostavni MVC pristup i dobio odgovor da se to moglo i proceduralno. Pa naravno sve se može proceduralno, OOP je samo pristup.
No nazovimo to simuliranje MVC je izvedeno u samo par klasa s koji 100 linija koda.

Danas, bilo koji PHP developer ukljućujući i mene da ide rješavati konkretan problem sa MVC na nekom projektu vjerovatno bi imao na 1000 linije koda. Možda MVC nije dobar primjer no bilo kakvo rješenje bi završilo isto.
Zato jer većina kvalitetnog koda (primjeri, literatura) u PHP OOP dolazi iz frameworka i možda čak niti nemamo izbor nego tako raditi.
A u biti cijelo vrijeme muhu ubijamo tenkom.