login  Naam:   Wachtwoord: 
Registreer je!
 Forum

OOP (PHP) leren

Offline Louis_ - 07/05/2010 11:38
Avatar van Louis_Nieuw lid hallo iedereen,

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?

17 antwoorden

Gesponsorde links
Offline vinTage - 07/05/2010 11:53
Avatar van vinTage Nieuw lid Google.be: phpmailer al eens bekeken ?
Offline Louis_ - 07/05/2010 12:09
Avatar van Louis_ Nieuw lid Hmm.. het woord "phpmailer" heb ik inderdaad al eens voorbij zien komen, maar ik wil graag zelf een OO script kunnen schrijven. (:
Offline vinTage - 07/05/2010 12:14
Avatar van vinTage Nieuw lid Je zocht volgens je inleiding naar een "goed voorbeeld" ...dus wat is het probleem dan ?
Offline Louis_ - 07/05/2010 12:18 (laatste wijziging 07/05/2010 12:29)
Avatar van Louis_ Nieuw lid 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.
Offline Jelmerholland - 07/05/2010 13:03 (laatste wijziging 07/05/2010 13:04)
Avatar van Jelmerholland PHP beginner Wellicht heb je hier ook wat aan?
Google.be: php oop tutorial beginner
Offline Louis_ - 07/05/2010 13:31
Avatar van Louis_ Nieuw lid 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
Offline Jelmerholland - 07/05/2010 13:55
Avatar van Jelmerholland PHP beginner *Ik heb nog nooit wat met OOP gedaan

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.

Zoiets denk ik...?
Offline jasper56 - 07/05/2010 22:26
Avatar van jasper56 Nieuw lid dit is nog wel een goede: http://www.mast...t1301.html
Offline Louis_ - 08/05/2010 08:53
Avatar van Louis_ Nieuw lid Jelmerhollan:

Wat jij zegt klinkt wel logisch. 

Jasper56:

Ik vroeg geloof ik niet om tutorials? Of bedoelde je iets anders?
Nouja, voor de mensen die er geïnteresseerd in zijn:
- http://net.tutsplus.com/tutorials/php/oop-in-php/
- http://devzone.zend.com/node/view/id/638 (inclusief humor  )

Zijn ook goed.

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

Offline jasper56 - 08/05/2010 10:55
Avatar van jasper56 Nieuw lid in een class kan je gewoon if en else gebruiken.
Net zo als in een normale functie.
Offline Louis_ - 09/05/2010 12:38 (laatste wijziging 09/05/2010 12:45)
Avatar van Louis_ Nieuw lid :)

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.
Offline Stijn - 10/05/2010 12:33
Avatar van Stijn PHP expert 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.

  1. <?php
  2. class Contact
  3. {
  4.  
  5. private $_ontvanger;
  6.  
  7. private $_zender;
  8.  
  9. private $_onderwerp;
  10.  
  11. private $_bericht;
  12.  
  13. private $_errors = array();
  14.  
  15.  
  16. public function __construct($ontvanger, $zender, $onderwerp, $bericht) {}
  17.  
  18.  
  19. public function validate() {} //kan een Exception gooien bij iets dat niet validate is.
  20.  
  21.  
  22. public function secure() {}
  23.  
  24.  
  25. public function send() {} //kan ook een exception gooien als het mislukt.
  26.  
  27. }


Het mogelijk gebruik:

  1. <?php
  2. $contact = new Contact("ontvanger@domein.be", $_POST['zender'], $_POST['onderwerp'], $_POST['bericht']);
  3.  
  4. try {
  5. $contact->validate();
  6. $contact->secure();
  7. $contact->send();
  8. }
  9. catch(Exception $e)
  10. {
  11. echo $e->getMessage();
  12. }


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.
Offline avdg - 10/05/2010 23:38 (laatste wijziging 10/05/2010 23:59)
Avatar van avdg PHP gevorderde /me bedenkt zich over de tutorials

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  .

Veel succes met je verdere speurtoch gewenst.
Offline Stijn - 10/05/2010 23:46
Avatar van Stijn PHP expert Leer eerst het verschil tussen de termen:

- klasse en object
- public, private en protected
- klasse, interface en abstracte klasse
Offline larssy1 - 12/05/2010 08:41
Avatar van larssy1 MySQL beginner Uhuh, ik heb me nooit verdiept in OOP..
Maar nu ik joun voorbeeld zie stijn, komt 't me allemaal erg bekend voor uit C# 
Offline roy - 12/05/2010 20:19 (laatste wijziging 12/05/2010 20:39)
Avatar van roy 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)
  1. <?php
  2. class address {
  3. var $conn;
  4.  
  5. function address($conn) {
  6. $this->conn = $conn;
  7. }
  8.  
  9.  
  10. function checkAddress($searchString) {
  11. $sQuery = "SELECT
  12. id
  13. FROM
  14. address
  15. WHERE
  16. $searchString
  17. ";
  18.  
  19. echo $sQuery;
  20. var_dump($conn);
  21. $rs = $this->conn->GetAll($sQuery);
  22.  
  23.  
  24. return $rs;
  25.  
  26. }
  27.  
  28. }
  29.  
  30. ?>



geocode.class.php
  1. <?php
  2. class geocoder {
  3.  
  4. function lookup($address) {
  5.  
  6. //Hier probeer ik het, maar $conn lijkt al leeg
  7.  
  8. $cAddress = new address($conn);
  9. echo $cAddress->checkAddress($searchString);
  10.  
  11. }
  12.  
  13. }
  14.  
  15. ?>



Ik krijg helaas de volgende error:
$conn = NULL
Fatal error: Call to a member function GetAll() on a non-object in address.class.php

Offline Stijn - 12/05/2010 22:06
Avatar van Stijn PHP expert In de klasse geocoder, functie lookup. Staat daar ergens een $conn variabele die een waarde krijgt?
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.225s