Ik wil een OO contactformulier maken, maar ik heb nog nooit OO geprogrammeerd en ik kan echt nergens een goed voorbeeld vinden dat me een beetje opweg helpt..
Heeft iemand hier misschien een voorbeeldje?
dat dat voorbeeld waarschijnlijk toch veel te moeilijk is.
en bovendien te uitgebreid, ik neem liever geen 2319 regels code door om erachter te komen hoe ik een simpel formuliertje met alleen naam/emailadres/bericht in elkaar moet zetten.
maar bedankt voor het voorbeeld, waarschijnlijk heb ik er later wel wat aan.
Ik heb echt al heel veel beginners (video)tutorials bekeken en gelezen, dus ik weet inmiddels wel hoe een simpele class eruit hoort te zien enzo. Maar ik zou dus echt niet weten hoe deze kennis kan toepassen op een contactformulier. :S
Maar ik denk dat je gewoon een class maakt.
Daarin zet je allemaal functies, de form checks.
Als al die functies doorlopen zijn. Dan gaat ie naar de daadwerkelijke 'mailfunctie'. ik zeg maar wat:
SendMail($to, $from, $subject, $message)
In die functie bouw je ook als je headers, zodat je die niet per mail() erin hoeft te zetten. Maar dan gebruikje gewoon je SendMail functie om je daadwerkelijke mail te versturen.
Maar wat ik nou nog steeds niet snap:
Mag je gewoon if/else statements gebruiken? Want zonder dat kan je toch nooit kijken of het formulier al verzonden is bijvoorbeeld? Maar in tutorials kom ik geen if/else tegen..
Maar ik kom er nog steeds niet uit hoe ik mijn script moet opbouwen..
Want hoe weet ik of ik het beste 1 of meerdere classes kan gebruiken, of ik subclasses moet gebruiken, of ik 1 of meerdere functies (methods?) moet gebruiken?..
Dit is namelijk wat ik wil:
->checken of formulier verzonden is = ja
--->checken of er velden leeg zijn = ja
---//output: errors en formulier met de ingevulde gegevens
--->checken of er velden leeg zijn = nee
------->checken of er ongeldige gegevens zijn ingevuld = ja
-------//output: errors en formulier met ingevulde gegevens
------->checken of er ongeldige gegevens zijn ingevuld = nee
-------//formulier emailen
->checken of het formulier verzonden is = nee
//formulier weergeven.
Hoe jij denkt is niet OO. In de OO wereld gaat het om het maken van klasses met hun eigenschappen. Daarvan maakt men objecten. We gaan je wat op weg helpen hé. Een contactformulier heeft een zender, onderwerp, bericht en ontvanger. Daar heb je al vier eigenschappen voor je klasse Contact. Een contact formulier kan de volgende methodes bevatten. Een validate() methode die controleert of de velden geldig zijn. Dat wil zeggen, is het mailadres van de zender wel echt een mailadres, is het bericht lang genoeg, is de naam geldig. Een methode secure() die de input gaat beveiligen. Voor bericht worden bv alle HTML tags weggehaald zodat javascript injectie not done is. Een methode send() om vervolgens alles te versturen naar de ontvanger. Dit zou het skelet zijn van je klasse.
<?php
class Contact
{
private $_ontvanger;
private $_zender;
private $_onderwerp;
private $_bericht;
private $_errors = array();
public function __construct($ontvanger, $zender, $onderwerp, $bericht) {}
public function validate() {} //kan een Exception gooien bij iets dat niet validate is.
public function secure() {}
public function send() {} //kan ook een exception gooien als het mislukt.
}
Als je een term niet snapt, er zijn hier tutorials over OOP genoeg (zelfs over exceptions). Dit is redelijk makkelijk maar zo'n klasse kan complexer zijn. Ik denk dan aan validator klasses maken, het toepassen van patronen om je code makkelijk te hergebruiken in andere projecten. Maar begin eerst met dit bovenstaande te begrijpen en te implementeren. OO lukt je niet in één dag, dat duurt een aantal weken/maanden voor je alles begrijpt.
Er was niet zo lang geleden een dergelijke topic geplaatst en het aanleren van oop leer je vaak niet in 1, 2, 3
back to topic:
Wat je best kan doen is pakweg bv. de (eerste) code van stijn nemen en ze eens ontleden, als je weet wat functies en variabelen zijn (dat hoop ik toch ) kan je eens kijken wat de variabelen en de functies (beter: attributes en methods) zijn van de class en kan je dan proberen kleine scripts te maken.
Edit: en ohja: probeer ook het concept van objects onder de knie te krijgen, waar er in dit geval een voorbeeldje staat in fragment 2.
Kijk dan vervolgend op http://php.net/oop en probeer dan de zaken 1 voor 1 bij te leren, op het gemak. Eventuele opzoekwerk op het internet en wat boeken/tutorials kunnen je op weg helpen.
Als je dat onder de knie hebt, kan je een kijkje nemen naar design patterns en architectural patterns. Het doel hiervan is om je goede inzicht te geven in goed georganiseerde code, zodat je later niet gefrustreerd moet rondlopen omdat je code niet netjes gestructureerd is .
Uhuh, ik heb me nooit verdiept in OOP..
Maar nu ik joun voorbeeld zie stijn, komt 't me allemaal erg bekend voor uit C#
roy - 12/05/2010 20:19 (laatste wijziging 12/05/2010 20:39)
PHP gevorderde
Ik heb hier ook een vraag over.
Ik heb twee classes. 1 class maakt gebruikt van het database connection object, de andere class niet. Hoe kan ik een functie aanroepen die het database connection object gebruikt vanuit de "normale class"?
address.class.php (die het connection object nodig heeft)
<?php
class geocoder {
function lookup($address) {
//Hier probeer ik het, maar $conn lijkt al leeg
$cAddress = new address($conn);
echo $cAddress->checkAddress($searchString);
}
}
?>