Hoe beginnen met post data
Nu heb ik een login formulier en ik weet niet wat ik nu moet doen.
Ik geb geen idee wat er moet gebeuren als het formulier wordt verzonden.
Met de gewone procedurele code zou ik het wel gewoon weten. Vroeger deed ik alles zonder OOP.
Maar als ik nu dus post data verzend, wat moet er dan gebeuren?
Hou vang je die data op met een method? waarmee voer je die method uit?
En hoe controleer je alle data, en stuur je een foutmelding als er iets niet goed is ingevuld?
Ik heb al heel veel tutorials gelezen, maar daar hebben ze steeds maar hele kleine voorbeeldjes waar je niet veel aan hebt.
Ook kom ik steeds door de war met bijvoorbeeld dit:
$class->method;
$class->method();
$variabele = $class->method;
$variabele = $class->method();
$variabele = new $class;
$veriabele = new $class->method;
... Ik weet niet welke opbouw voor wat dient.
Beter gezegd, ik weet totaal niet waar ik mee bezig ben.
Gewijzigd op 02/09/2012 21:33:02 door Jan terhuijzen
Lees anders eens mijn OO serie, die legt een heel ander aspect van OO uit, iets wat 99% van alle tutorials niet doet: http://wouterj.nl/serie/orienteer-je-in-objecten/
Gewijzigd op 02/09/2012 21:35:48 door Wouter J
De meeste tutorials zeggen juist "Begin meteen"
Het hoeft niet, je kunt met OOP ook gewoon de dingen maken zoals je dat eerst deed, maar het is beter om structuur aan te brengen. Handel je data af in een model, handel het laten zien van pagina's in een view, en bepaal wat je moet doen in een controller. Dat zijn de elementen van MVC, de Model-View-Controller. Heel veel websites zijn gemaakt op basis van MVC.
Als start zou je mijn super simpel MVC voorbeeld eens kunnen nabouwen.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$class->method;
$class->method();
$variabele = $class->method;
$variabele = $class->method();
?>
$class->method;
$class->method();
$variabele = $class->method;
$variabele = $class->method();
?>
Hier noem je het beide method, maar het eerste is het aanroepen van een property. Zie het als een variabele in een class. In flat php doe je het zo:
Bij de eerste krijgt $var de waarde van een variabele. Bij de tweede de waarde die uit een functie wordt teruggegeven. In OOP kan je een property in een class als een variabele zien en een methode in een class als een functie:
Code (php)
Hier is wel een uitzondering en dat zijn de magic methods. Maar laat die nog even, zorg eerst dat je het echte verschil tussen properties en methods kent.
Dan de laatste twee voorbeelden die je gaf:
Dit kan eigenlijk niet. Tenzij de variabele $class een string bevat van een bestaande class. Hetzelfde met de tweede, waarin je dus een object hebt, die weer een property heeft waarin de string zit met de naam van een bestaande class.
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$class = 'Mijn_Class';
//$variabele wordt nu een instantie van Mijn_Class
$variabele = new $class;
?>
$class = 'Mijn_Class';
//$variabele wordt nu een instantie van Mijn_Class
$variabele = new $class;
?>
Dit wordt best wel zo gebruikt, maar ergens denk ik niet dat je dit zo voor ogen had.
Dan over hoe je $_POST waardes uitleest. In principe net zoals in flat php. Dus je kan gewoon $var = $_POST['veld'] doen. Alleen moet je je bedenken dat in OOP elke class altijd maar 1 verantwoordelijkheid moet hebben. Dat betekent dat als je bijvoorbeeld een controler hebt zoals in het model van John, die controller misschien wel POST waardes nodig heeft, maar die niet zelf uit de POST moet halen. Net zoals je database class dat niet moet doen. Wat je wilt is 1 class die de gegevens ophaalt en teruggeeft en ook zorgt voor controle van de gegevens. Bijvoorbeeld door een default waarde te geven, of een exception te gooien. Zo kan elke andere class veilig de gegevens ophalen, mocht je iets willen veranderen in hoe het gebeurt hoef je dat maar op 1 plek te doen.
Overigens, als het goed is heb je bij het lezen van bovenstaande een mogelijk contradictie in mijn tekst gezien.
"elke class altijd maar 1 verantwoordelijkheid moet hebben"
en
"1 class die de gegevens ophaalt en teruggeeft en ook zorgt voor controle van de gegevens"
Dat zijn al twee verantwoordelijkheden. Klopt, je zal het dus al in 2 classes moeten splitsen (en misschien nog wel meer). 1 class die de waardes uitleest en dan een andere class die de uitgelezen waardes controleert.
Gewijzigd op 02/09/2012 23:40:15 door Erwin H