login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[OOP] wat is het logischte?

Offline nemesiskoen - 13/06/2005 20:33 (laatste wijziging 13/06/2005 20:49)
Avatar van nemesiskoenGouden medaille

PHP expert
Ik was eens aan het denken.
Over mogelijkheden met PHP.
Toen kwam ik bij OOP:).

Nu, ik vroeg me af wat het logischte(/beste) is.
- Een class output laten versturen.
- Een class gegevens via methodes terugsturen en deze via het object laten outputten.

Volgens mij is die laatste het logischte.
Ik heb daarom ook een klein voorbeeldje gemaakt waar je het zo kan doen.

De class ('t is maar een dummy klasse) kan 2 argumenten als invoer krijgen. Ik wil de som berekenen van deze 2, maar dan moet ik wel eerste kijken of ze geldig (is_numeric) zijn.
Als dit niet zo is gooi ik een error (ik weet dat ik zoiets beter via throw/try/catch zou moeten doen, maar 't is om een voorbeeld te kunnen geven... even illustreren wat ik bedoel). Ik vang deze error op in een variabel en zet een andere variabele (isError) op true. Dan ga ik via een booleaanse methode de waarde van isError terugsturen zodat de gebruiker via het object kan achterhalen of er een error is of niet.

  1. <?php
  2.  
  3. class test {
  4.  
  5. private $getalA; //eerste getal
  6. private $getalB; //tweede getal
  7. private $errorString; //bevat de error string
  8. private $isError = false; //boolean om te controleren of er een error is
  9.  
  10. function __construct( $getal1 = 0, $getal2 = 0 ) {
  11.  
  12. $this->getalA = $getal1;
  13. $this->getalB = $getal2;
  14.  
  15. if( !is_numeric( $this->getalA ) || !is_numeric( $this->getalB ) ) {
  16.  
  17. $this->gooiError( "De waardes moeten numeriek zijn!" );
  18. }
  19.  
  20. }
  21. public function som() {
  22.  
  23. return $this->getalA + $this->getalB;
  24.  
  25. }
  26. private function gooiError( $errorStr ) {
  27.  
  28. $this->errorString = $errorStr;
  29. $this->isError = true;
  30.  
  31. }
  32. public function getError() {
  33.  
  34. return $this->errorString;
  35.  
  36. }
  37. public function isSetError() {
  38.  
  39. return $this->isError;
  40.  
  41. }
  42.  
  43. }
  44. ?>


Dat is m'n klasse. Nu zou je die op volgende manier 'kunnen' aanroepen.



  1. <?php
  2. $obj = new test( "we", 6 );
  3.  
  4. if( $obj->isSetError() ) {
  5.  
  6. echo $obj->getError();
  7.  
  8. }
  9. else {
  10.  
  11. echo "Som is: ". $obj->som();
  12.  
  13. }
  14.  
  15. ?>


Zoals je ziet output ik niets via de klasse, maar roep ik de waarde aan via $obj.

Zoals ik op het begin al zij was mijn vraag, wat is het logischte(/beste).
Ik vond deze methode de beste, maar was toch benieuwd wat jullie hiervan denken. Als je een andere manier logischer/beter vind gelieve dit dan te zeggen (:)) en ook zeggen waarom?

3 antwoorden

Gesponsorde links
Offline Fenrir - 13/06/2005 20:53 (laatste wijziging 13/06/2005 20:55)
Avatar van Fenrir PHP expert Ik denk dat het 2e het beste is. Als je de output wilt opslaan (bij de 1e manier) moet je met ob_start() gaan werken. Als je het wilt echoen kan dat makkelijk.

Ook is het logischer omdat een object gegevens verstrekt, en niet print. (wel als je een aparte print-class maakt natuurlijk )

Ik denk dat het MVC-pattern je wel interesseert:
http://www.phpp...iew/19/1/1/

Daar zie je dat objecten elkaar gegevens doorgeven, en die dan verder verwerken:

eerst wordt de request verwerkt
dan wordt de data uit de database geladen
daarna wordt de data omgezet in htmlcode (of bijvoorbeeld rss, of een plaatje mbv GD).

Dit vind ikzelf een fijne manier van werken. Het enige dat ik anders doe is het view-gedeelte. Ik doe dat met templates, en bij dit voorbeeld met html-in-php-code.
Offline Thomas - 13/06/2005 21:23
Avatar van Thomas Moderator Het meest logische lijkt mij een print-methode bij een class .
Offline Fenrir - 13/06/2005 21:48 (laatste wijziging 13/06/2005 21:49)
Avatar van Fenrir PHP expert Ja, dat kan ook. Maar dan krijg je code als dit:

  1. <?php
  2.  
  3. echo $o->GetOutput();
  4.  
  5. ?>


en

  1. <?php
  2.  
  3. class c
  4. {
  5. //...
  6.  
  7. function PrintOutput()
  8. {
  9. echo $this->GetOutput();
  10. }
  11. }
  12.  
  13. $o->PrintOutput();
  14.  
  15. ?>


Dus dat is dan niet echt nuttig...
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.237s