[PHP] Hoe kan methode binnen class overschrijven?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • spazmaster
  • Registratie: November 2001
  • Laatst online: 22-10-2020
Ik maak gebruik van de PEAR HTML_QuickForm class.
Voor degenen die hier niet mee bekend zijn, deze 'class' maakt het een stuk simpeler en makkelijker om HTML formulieren te gebruiken, te valideren en te verwerken zoals bijv het onderstaande script:

PHP:
1
2
3
4
5
6
7
8
9
$form = new HTML_QuickForm('frmTest', 'POST');

$form->addHeader('Test');
$form->addElement('text', 'textTest', 'Test Text:');
$form->addElement('submit', 'isubTest', 'Test Submit');

if ($form->validate()) {
    $form->process();
}


Een van de methodes van de class is proces(). zoals de naam al doet vermoeden verwerkt deze de gegevens die het formulier oplevert. Nu staat in de documentatie dat ik de process methode moet 'override'-en. Normaal gesproken is er sprake van overriding door een nieuwe klasse aan te maken die de HTML_QuickForm classe extends en hierbinnen een nieuwe process() methode te schrijven.

Mijn vraag is of ik hiervoor echt een nieuwe klasse moet aanmaken of dat ik binnen de huidige script de functie kan overschrijven door bijv zoiets te doen:

PHP:
1
2
3
function $form->process() {
//formulier gegevens opslaan in db
}


Nu weet ik dat mijn voorbeeld niet echt juiste code is maar ik hoop dat het idee duidelijk is.

Kan ik gewoon binnen het huidige script de nieuwe classe maken en hierin de methode overschrijven? Of moet ik een externe classe aanmaken.


Alvast bedankt voor hulp.

PS. Geef me aub geen RTFM. De documentatie van de PEAR repositories laat de wensen over (niet dat ik klaag want mijn probleem is meer een algemeen PHP geval). Maar ook de doorgaans zo volledige php.net liet me bij dit geval in de steek. Menigeen andere PHP sites konden me ook niets vertellen. Misschien is dit wel zo basis OOP dat ik het zou moeten weten maar is helaas niet het geval.

[ Voor 6% gewijzigd door spazmaster op 21-12-2002 00:59 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Waarom maak je niet een class die de huidige class extend?
Ik vind dat je nu een beetje onnodig moeilijk wilt doen. Het idee aan classes is dat je ze niet de hele tijd gaat wijzigen.

Wat is er zo verkeerd met het volgende?

PHP:
1
2
3
4
5
6
7
8
9
class MyForm extends HTML_QuickForm {
   function MyForm ( $name, $method ) {
      HTML_QuickForm::HTML_QuickForm ( $name, $method );
   }

   function process () {
      // code here
   }
}

Ik zie gewoon niet helemaal wat jij daar nou voor nadeel in ziet.

Acties:
  • 0 Henk 'm!

  • spazmaster
  • Registratie: November 2001
  • Laatst online: 22-10-2020
Ja dat kan natuurlijk ook. En is misschien wel de juiste oplossing voor mij. Maar ik vond het weer zo onnodig om in elk script waar ik de QuickForm gebruik weer een nieuwe class te moeten defineren met een andere process() methode.

Maar met jouw manier kan ik wel deze class extern in mijn library zetten en dan een wat uitgebreidere methode process() maken die meerdere bewerkingen van de formulier gegevens kan doen vanuit meerdere scripts waar ik de QuickFOrm gebruik. Bijv insert, update etc door arrays van connectie parameters, db velden en de waardes zelf mee te geven.

Bij nader inzien lijkt jouw oplossing om de hele class te extenden dan toch het beste om te gebruiken ipv alleen de methode te kunnen overschrijven. Bedankt voor je tip en je tijd. 8)