login  Naam:   Wachtwoord: 
Registreer je!
 Forum

OOP newbie

Offline xSc - 19/12/2007 15:13
Avatar van xScOnbekend Ik ben begonnen met OOP. Ben ik zo op de juiste weg, of heb ik het volkomen mis.

http://www.plaatscode.be/4510/

13 antwoorden

Gesponsorde links
Offline Stijn - 19/12/2007 15:26
Avatar van Stijn PHP expert Je code is wel correct maar ik zie niet zoveel nut van die class.

1) Een class heeft properties (eigenschappen).
2) Methoden in een class zijn meestal gebasseert op je properties.

Het klassieke voorbeeld is een auto. Een auto heeft bepaalde eigenschappen (kleuren, aantal deuren, ...). Je kan een methode geven aan die class die gebasseert is op die properties ( openDeur() , getKleur(), setKleur() , ...).

3) Je hebt een constructor nodig.
4) Typecasting is niet nodig aangezien de keyword new __CLASS__ altijd een object teruggeeft.
Offline xSc - 19/12/2007 15:30
Avatar van xSc Onbekend Stijn,

Bedankt voor je opmerkingen. Waarom is een class nuttig of niet?

Als je bijv. naar VB .Net kijkt, doe je alles in classes, of het nuttig is of niet. Moet je hier dan gewoon aparte functies van maken?

Ik wilde in deze class ook de controle op formuliervelden doen. Wordt het dan nuttiger of hoe moet ik het anders doen?

Heb je altijd een constructor nodig? Ik weet wel wat een constructor/destructor is, maar ik achtte het niet nodig in deze class (nog niet tenminste).
Offline Stijn - 19/12/2007 15:50
Avatar van Stijn PHP expert .NET en Java zijn inderdaad talen die geschreven worden in OO stijl. Toch heeft iedere class van die talen ook properties en methods.

In PHP kan je classes gebruiken voor het verkorten van je code omdat de meeste code in de classes zitten. Als die class voor jou persoonlijk nuttig is, ga ik je niet tegenhouden die te gebruiken.

Als ik een class Formulier download dan denk ik meteen aan het maken van formulieren, controleren ervan enzovoort. Jou class doet slechts een klein deeltje van een Formulier.
Offline xSc - 19/12/2007 15:54
Avatar van xSc Onbekend De controle maak ik er ook in.

aar het maken van formulieren in classes is voor luie mensen, heb ik gelezen Ik bedoel: is het handig om HTML te gaan vermengen met je PHP? Moet je je formulieren niet gewoon in HTML maken?

Wat mij nog niet duidelijk is, is je verhaal over methods en properties. Heb je daar een concreet voorbeeld van?

Offline Stijn - 19/12/2007 16:03
Avatar van Stijn PHP expert Stel dat je een class Bestand maakt. De eigenschappen van een map zijn:

- De map waarin het zit (Je kan gebruik maken van een class Map eventueel)
- De naam
- Content type
- resource Link

De methoden zijn simpel te vinden:

- __construct('test.txt') -> zal de file openen of gewoon kijken of het bestaat.
- open() -> zal de file openen.
- write( $data ) , read() , ... -> hoe logisch?
- __destruct() -> kan de file sluiten

Je kan ook eventuele andere methoden schrijven die het werken met files nog makkelijker maken.

Dit is een simpel voorbeeld. Een class schrijven is behoorlijk nutteloos tenzij je eigen mini-framework wilt maken. Het is nutteloos omdat er al zoveel classes zijn. Daarom dat de meeste scripters classes maken voor eigen gebruik.
Offline xSc - 19/12/2007 16:15 (laatste wijziging 19/12/2007 16:17)
Avatar van xSc Onbekend Stijn, ik snap hem.

Maar afijn.

- OnthoudInvoer
- OnthoudSelect
- OnthoudRadioCheckbox
- ControleerNaam
- ControleerAdres
- ControleerPostcode
- ControleerPlaats
- ControleerEmailadres
- ControleerTelelefoonnummer
- ControleerVrijVeld

Ik zou dan in de construct kunnen controleren of het formulier verzonden is en zo ja een var (private $bIsGepost) setten i.p.v. de aparte functie fIsGepost().

  1. <?php
  2.  
  3. class Formulier
  4. {
  5.  
  6. private $bIsGepost = false;
  7.  
  8. function __construct()
  9. {
  10.  
  11. if ($_SERVER['REQUEST_METHOD'] == 'POST')
  12. {
  13.  
  14. $this->$bIsGepost = true;
  15.  
  16. }
  17.  
  18. }
  19.  
  20. // de rest van de functies.
  21.  
  22. }
  23.  
  24. // de rest.
  25. ?>
Offline Ibrahim - 19/12/2007 16:20
Avatar van Ibrahim PHP expert En je ziet toch zelf dat de class veel simpeler kan, je herhaalt jezelf in 2 functies.

Maak een algemene functie genaamd fOnthoud, bijv:

  1. private function fOnthoud($sElement, $sWaarde1 = NULL, $sWaarde2 = NULL, $return)
  2. {
  3.  
  4. if ($this->fIsGepost())
  5. {
  6.  
  7. $sWaarde2 = intval($_POST[$sElement]);
  8.  
  9. }
  10.  
  11. return (!is_null($sWaarde1) && $sWaarde1 == $sWaarde2 ? $return : '');
  12.  
  13. }


deze kun je dan toepassen op select en radio, en de beste is, dat je nu alleen 1 functie hoeft aan te passen om de verandering voor zowel radio als select toe te paasen 
Offline xSc - 19/12/2007 16:27
Avatar van xSc Onbekend Psycho dat klopt maar ik bedoel meer m'n werkwijze. Dit is wat oefenmateriaal 
Offline Ibrahim - 19/12/2007 16:30
Avatar van Ibrahim PHP expert Ik zou in een formulier class niet een controle uitvoeren voor form submitten, dat is gewoon 1 regel code in een functie verwerken.

Wat ik zou doen is, een hierarchie maken:

Een hoofdclass genaamd formulier, met zijn kinderen select/text/checkbox/etc.

Want elk type kan andere interpretaties hebben, alle functies in 1 class proppen hoeft dus niet met de magische kracht van extenden 
Offline Wim - 19/12/2007 16:51
Avatar van Wim Crew algemeen Hier een klein voorbeeldje van een server-side cachings classe
http://gdx.be/cache.class.phps

In het begin van mijn pagina maak ik een nieuw object cache, en op de volgende regel roep ik de functie start van die classe aan:
$cache->start('bestandsnaam');

op het einde van de pagina zet ik:
$cache->write();

Je ziet, ik spreek 2 functies aan, wat me dus een pak code scheelt gezien ik dit op elke pagina moet doen.

De bedoeling van een classe is imo vooral makkelijkheid en duidelijkheid...
Offline Stijn - 19/12/2007 16:54
Avatar van Stijn PHP expert
Citaat:
op het einde van de pagina zet ik:
$cache->write();

Ik kan het gebruik nogmaals verkorten in je class 

Zet gewoon $this->write(); in je __destruct() , dan moet je enkel je cache oproepen.
Offline xSc - 19/12/2007 17:01
Avatar van xSc Onbekend Bedankt. Ik heb nu eigenlijk een set functies in een class, maar die ik toch allemaal moet aanroepen. Het is dus dan niet handig om een class te gebruiken, maar om gewoon functies te gebruiken.

Ik blijf dan alleen met de vraag zitten met talen zoals Java en .Net, waarin alles OOP is. Dan zit je toch met hetzelfde verhaal?
Offline Stijn - 19/12/2007 19:30
Avatar van Stijn PHP expert Nee want die makers hebben dat slim gezien. Ieder ding op je scherm is een object. Een knop is een object die eigenschappen heeft (kleur, tekst, achtergrond, positie , ...) en je kan allerlei acties doen op het object.

Je hebt natuurlijk wel de main class nodig maar daarin wordt het uiteindelijke programma gemaakt en een programma heeft ook eigenschappen/methodes nodig.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.21s