Mijn doel is goede en veilige PHP formulieren kunnen maken en met een PHP framework(s) websites kunnen maken.
Dat is nogal een verschil. In beide gevallen komen er een aantal (of misschien een heleboel) zaken bij elkaar.
Ik vergelijk het leren van PHP met het lezen van een verhaal in een boek. Als je het boek ergens in het midden openslaat en begint te lezen, ontgaat je waarschijnlijk de helft, als je het verhaal uberhaupt al kunt volgen.
Een mogelijk "natuurlijke weg" om PHP binnen te rollen is als volgt:
- maak jezelf bekend met HTML en met het HTTP protocol (en later ook met andere protocollen of RFC's)
- het is ook belangrijk om wat kaas te hebben gegeten van CSS, want je kunt dan nog de mooiste technische concepten bedenken, als je deze niet vorm kunt geven in iets werkbaars, dan heb je nog steeds niet zoveel
- een mogelijk volgende stap is meer (in eerste instantie client side) interactie toevoegen door middel van JavaScript, dit geeft je ook inzicht in de algemene bouwstenen van een scripting/programmeertaal; hierbij kan het handig zijn om een library te gebruiken om te voorkomen dat je al teveel wordt blootgesteld aan nuances tussen browsers, je wilt per slot van rekening gewoon het liefst JavaScript schrijven die out-of-the-box al cross browser compatibel is.
Als dit voor jou na verloop van tijd platgetreden paden zijn (of je hier op zijn minst wat relevante bagage van hebt) wordt het tijd voor PHP. Het is handig om eerst kennis te maken met de aard van dit beestje: het is een
server side scriptingtaal. Zorg dat je weet wat dit precies inhoudt in zijn simpele vorm (hoe komt een pagina -of response- tot stand) en later als je complexere dingen gaat doen waarbij er meer interactie is (schaakspel met/via HTTP requests middels AJAX etc).
Initieel zul je voornamelijk dingen op een procedurele manier aanpakken, maar na verloop van tijd zul je meer en meer uitstapjes maken naar OOP, omdat je daarin bepaalde dingen makkelijker kunt aanpakken.
Dan zou je wat meer de diepte in kunnen gaan met security, performance, eenvoudige data-structuren in de vorm van (geneste) arrays en boomstructuren. En dan zou je een database-interface of -driver als PDO of MySQLi kunnen verkennen om interactie met databases mogelijk te maken.
Wat je ook doet met PHP, het zal altijd een combinatie van meerdere technieken zijn. Zorg dus dat je van meerdere dingen iets weet.
En wat @Rob zegt is misschien het meest van toepassing. Je leert een hoop door te doen. Een goede manier om gemotiveerd te blijven (een onderzoekende aard en nette werkhouding is wel een beetje een vereiste) is door een onderwerp te kiezen, en die eens uit te werken als een soort van case study. Of je ziet iets voorbij komen en denkt "hoe zou dit werken" of je hebt een idee en je vraagt je af "hoe zou ik dit kunnen maken". Hierbij is het wel verstandig om niet weg te lopen in je eigen enthousiasme en te werk te gaan via een een soort van plan. Daarbij is het ook bij tijd en wijlen een goed idee om eens een paar stappen terug te nemen en je af te vragen of je niet te ver bent afgedwaald van wat je eigenlijk voor ogen had en/of de code ondertussen niet compleet krankzinnig is geworden :p. Een structurele aanpak is een pre. Hierbij helpt het dat je jezelf ook een verdeel-en-heers strategie aanmeet. Je leert PHP niet in een week, maar je kunt in een week wel meer te weten komen over een specifiek onderwerp. Maak hier ook een soort van documentatie van zodat je niet alles over twee weken weer kwijt bent.
Wat ik vooral mis bij boeken, tutorials en de hele rimram is niet zozeer de code die je braaf overklopt, maar de dingen die (al dan niet) onverwachts foutgaan. Ik zie zelden tot nooit dat er aandacht wordt besteed aan foutmeldingen, dus als iemand eens een keer een (type)"cursus" volgt en ergens een fout maakt krijgt men of een wit scherm of een of andere toverspreuk uit een andere dimensie op het scherm te zien en men is dan meteen compleet ontredderd. Het leren lezen en interpreteren van foutmeldingen levert een schat aan informatie en ervaring op, ik zou haast zeggen dat de beste manier om (PHP) te leren programmeren is
door te leren hoe je kunt debuggen. Je maakt hier namelijk kennis met programmaflow, typen van variabelen, definities van functies, methoden en objecten et cetera. Dit draagt enorm bij aan kennis maar vooral ook begrip.
Een ander ding wat ik (persoonlijk) belangrijk vind is dat je kunt onderbouwen waarom je doet wat je doet. In zekere zin maakt het geen reet uit wat je schrijft, zolang je maar weet waarom je het zo hebt geschreven. "Op StackOverflow werden er ook karakters geconcateneerd aan de password hashes" is een voorbeeld van een slechte onderbouwing die getuigt van weinig eigen onderzoek/begrip. Het wordt natuurlijk anders als je in groepsverband werkt, waarbij iedereen een soortgelijke werkhouding dient te hebben die is verankerd in procedures, codeconventies et cetera.
Het devies is dus voornamelijk "baby steps". Kies een onderwerp en baken deze af, werk dit uit, herhaal. Ga volgens een plan te werk. Annoteer code, documenteer zaken. Je kunt je natuurlijk ook nog verdiepen in de webserver-kant (linux, nginx et cetera) maar je kunt altijd "simpel" beginnen met een WAMP installatie op je Windhoos machine of je schaft ergens wat goedkope webruimte aan. En ook dan kom je er waarschijnlijk vrij snel achter dat je van een heleboel dingen niet zoveel weet en dat je in elk van deze zaken kleine uitstapjes moet maken om maar tot oorzaken/conclusies of kennis te komen waarom bepaalde dingen soms niet werken zoals je wilt.
Dus.
1. Maak een plan van wat je wilt weten (en probeer hier niet meteen naar het eindresultaat te springen, maar deel dit op in stappen, het is leuk dat je naar Z wilt gaan, maar als je vervolgens al niet weet hoe je van A naar B dient te gaan dan houdt het snel op - het is handig om je eindpunt aan de horizon in het vizier te houden, maar denk na over de eerstvolgende stap die je zet).
2. Voer het plan uit en kom te weten wat je wilde weten (en werk zo stapsgewijs naar Z toe).
:p