Hoe beginnen met post data

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jan terhuijzen

jan terhuijzen

02/09/2012 21:29:48
Quote Anchor link
Hallo ik ben bezig met OOP in PHP
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
 
PHP hulp

PHP hulp

24/11/2024 17:11:14
 
Wouter J

Wouter J

02/09/2012 21:35:09
Quote Anchor link
Ben je nu al begonnen met scripten? Tja, sorry dat ik het zeggen moet, maar dat is dan je grootste fout. In OO moet je gaan nadenken i.p.v. code als een kip zonder kop opschrijven. Het klinkt hard, maar zo is de waarheid helaas wel. Sluit de computer een uur, 2 uur zolang je nodig hebt en ga eerst uittekenen wat je wilt en hoe je dat op de computer gaat krijgen.

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
 
Jan terhuijzen

jan terhuijzen

02/09/2012 21:43:10
Quote Anchor link
Oke bedankt, dit is dus wat ik zoek: volledige info.
De meeste tutorials zeggen juist "Begin meteen"
 
John Berg

John Berg

02/09/2012 21:57:51
Quote Anchor link
@Jan: als je overgaat op OOP is het meteen een mooi moment om eens na te denken over het grotere geheel.

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.
 
Erwin H

Erwin H

02/09/2012 23:38:31
Quote Anchor link
Eens met Wouter en John. Wel nog even wat extra info. Ten eerste over het aanroepen van de methods in je classes.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$var
= $een_andere_var;
$var = mijn_functie();
?>

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$class
= new Mijn_Class();
$var = $class->property;
$var = $class->methode();

//definitie in de class:
class Mijn_Class{
  //een property
  public property = 12;

  //een methode
  public function methode(){
    return 13;
  }
}

?>

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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$variabele
= new $class;
$veriabele = new $class->method;
?>

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.