login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[PHP] Soorten Classes

Offline genkstar - 11/04/2010 21:02
Avatar van genkstarNieuw lid Hey PHP'ers!

Ik heb een vraag voor wat verschillende classes dienen.
Voorbeeld Abstracte Classe
interface etc.

Wie kan me dat uitleggen voor wat ze dienen, en waar ze gebruikt worden?

Mvg
Serkan Yildiz

16 antwoorden

Gesponsorde links
Offline Raze - 11/04/2010 22:01
Avatar van Raze PHP beginner zeker en vast deze pagina's eens doornemen: http://php.net/manual/en/language.oop5.php
Hier staat ook veel informatie op: http://nl.wikib...ssen_PHP_5

Een abstracte klasse kan je niet instantiëren, hoewel er wel functies inzitten. Je kan deze functies enkel aanroepen door de abstracte klasse met andere klasses te extenden.

Een voorbeeld in php:
  1. <?php
  2. abstract class dier
  3. {
  4. abstract public function blaffen();
  5.  
  6. public function eten()
  7. {
  8. echo "Het dier eet";
  9. }
  10. }
  11.  
  12. class hond extends dier
  13. {
  14. public function blaffen()
  15. {
  16. echo "De hond blaft";
  17. }
  18. }
  19.  
  20. // De klasse "hond" aanroepen
  21. $dier = new hond;
  22. $dier->blaffen(); // dit zal "De hond blaft" weergeven
  23. $dier->blaffen(); // dit zal "Het dier eet" weergeven
  24.  
  25. // De klasse "dier" aanroepen
  26. $dier = new dier; // Dit zal niet werken, want het is een abstracte klasse
  27. $dier->eten();
  28. ?>



Een interface legt de functies die gebruikt worden in een klasse (of meerdere klasses), vast => polymorfie. Je kan, net zoals bij abstracte klasses, een functie uit een interface niet instantiëren.
$klasse = new klasse ;
$klasse->test();
(waar bij klasse een interface is, en test een functie) zal dus niet werken.

Opnieuw een voorbeeld in php:
  1. <?php
  2. interface dier
  3. {
  4. function eten();
  5. }
  6.  
  7. class hond implements dier
  8. {
  9. public function eten()
  10. {
  11. echo "De hond eet";
  12. }
  13. }
  14.  
  15. class kat implements dier
  16. {
  17. public function eten()
  18. {
  19. echo "De kat eet";
  20. }
  21. }
  22.  
  23. // De klasse "hond" aanroepen
  24. $dier_h = new hond;
  25. $dier_h->eten(); // zal "De hond eet" weergeven
  26.  
  27. // De klasse "kat" aanroepen
  28. $dier_k = new kat;
  29. $dier_k->eten(); // zal "De kat eet" weergeven"
  30.  
  31. ?>


Ik hoop dat je hier wat aan hebt, lees zeker de link naar de PHP-website eens na.
Offline ArieMedia - 11/04/2010 22:13
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Raze schreef:
zeker en vast deze pagina's eens doornemen: http://php.net/manual/en/language.oop5.php
Hier staat ook veel informatie op: http://nl.wikib...ssen_PHP_5

Een abstracte klasse kan je niet instantiëren, hoewel er wel functies inzitten. Je kan deze functies enkel aanroepen door de abstracte klasse met andere klasses te extenden.

Een voorbeeld in php:
[..code..]


Een interface legt de functies die gebruikt worden in een klasse (of meerdere klasses), vast => polymorfie. Je kan, net zoals bij abstracte klasses, een functie uit een interface niet instantiëren.
$klasse = new klasse ;
$klasse->test();
(waar bij klasse een interface is, en test een functie) zal dus niet werken.

Opnieuw een voorbeeld in php:
[..code..]

Ik hoop dat je hier wat aan hebt, lees zeker de link naar de PHP-website eens na.


Als aanvulling.
Bij abstracte klasse kan je nu ook blaffen aanroepen, maar dan zo.
  1. <?php
  2. echo dier::blaffen();
  3. ?>

Verder een opmerking, in een klasse probeer je natuurlijk "echo" (en print) te vermijden, tenzij je het ECHT nodig hebt (nooit dus). Scheelt een hoop header fouten =]
Offline Raze - 11/04/2010 22:21
Avatar van Raze PHP beginner arie bedoelt natuurlijk bij zijn code (denk ik)
  1. <?php
  2. echo hond::blaffen();
  3. ?>


aangezien in mijn code "dier" de abstracte klasse is, en deze dus niet kan worden aangeroepen.
Offline genkstar - 11/04/2010 22:43
Avatar van genkstar Nieuw lid Wat is dan het verschil tussen een abstracte class en interface?
Offline Raze - 11/04/2010 22:45
Avatar van Raze PHP beginner in een abstracte klasse kan je een functie "bouwen", dus elementen toevoegen. Je kan ze alleen niet (rechtstreeks) gebruiken. In een interface definieer je alleen de klasses zonder er verder iets mee te doen, dat doe je in andere klasses.
Offline genkstar - 11/04/2010 22:49
Avatar van genkstar Nieuw lid En nog een vraag, Wanneer zal je een abstracte classe gebruiken, wanneer een interface en wanneer een gewone classe?
Offline Raze - 11/04/2010 22:53
Avatar van Raze PHP beginner haha, dat is iets wat ik mezelf ook heel dikwijls afvraag  

ik gebruik meestal gewone klasses, maar bv om constanten te definiëren die je in een andere klasse gaat gebruiken is een interface wel handig omdat je daar ook constanten in kan definiëren (aan de andere meer gevordere gebruikers hiervan: correct me if i'm wrong!!).

een abstracte klasse kan je gebruiken als je functies wil maken die je enkel via andere klasses wil kunnen aanroepen.
Offline Button - 11/04/2010 23:29 (laatste wijziging 11/04/2010 23:36)
Avatar van Button PHP ver gevorderde Wel zo'n interface (abstracte) klassen komen bijvoorbeeld handig van pas bij polymorfisme, zoals hierboven al aangegeven. Wanneer een programmeur een complete klassenstructuur (met afgeleide klassen en basisklassen dus)schrijft en hij wil dat elke afgeleide klasse bepaalde functies ondersteunt, dan verzekert hij dat dit gebeurt door een interface-klasse als basisklasse te maken. Stel: jij en je vrienden-slaven-programmeurs hebben de opdracht gekregen om alle soorten voertuigen onder te brengen in een klassenstructuur. Wel dan dan heb je verschillende onderverdelingen: watervoertuigen (met ondervedeling: jachten, jetski's, ...), wegvoertuigen (met onderverdelingen: vierwielers, tweewielers, éénwielers(?), ...), luchtvoertuigen (luchtballon, F16, bezemsteel, ...). Nu, jij staat het hoofd van het project en moet dus de basisklasse schrijven. Bovendien wil je er zeker van zijn dat je vrienden er voor zorgen dat elk voertuig dat zij toevoegen aan de klassenstructuur (dus afleiden van een 'hogere' klasse (bv. van de wegvoertuigen) kan bewegen (lees: dat het een functie move() bevat). Nu door zo'n interfaceklasse te definiëren en daarin aan te geven dat move() zeker tot de interface (snap je hem, "interface") moet behoren van je klassenstructuur, zit je goed en verplicht je dat je vrienden alleen voertuigen toevoegen die kunnen bewegen (en als ze het toch niet zouden doen, heb jij heel domme vrienden...). (btw: wat ik nu juist beschreef is geen polymorfisme, maar steunt wel op zo'n klassenstructuur, met al dan niet een interfaceklasse als basisklasse, google eens op polymorfisme)

Alstublief.  
Offline genkstar - 12/04/2010 00:02
Avatar van genkstar Nieuw lid Thanks voor de verschillende uitleggen, nu sta ik wel verder met mijn zicht op Abstracte classes en interface classes ;)
Offline Koen - 12/04/2010 15:56
Avatar van Koen PHP expert @Raze: Een class bestaat uit een verzameling van properties en methods, niet uit variabelen en functies. 
Offline Raze - 12/04/2010 16:05
Avatar van Raze PHP beginner @koen: heb je gelijk in, die worden worden ook op php.net gebruikt, maar voor de gemakkelijkheid noem ik een method meestal een functie omdat het woord "function" ervoor staat. en tja een propertie wordt ook geschreven gelijk een variabele.

Btw, zelf even een vraagje: ik las ooit ergens dat het onveilig is om bv $_SESSION te gebruiken in een method ( ) zelf, maar op deze wel door te geven, dus een voorbeeld:

  1. // dit zou onveilig zijn
  2. class test
  3. {
  4. public function username()
  5. {
  6. echo $_SESSION['username'];
  7. }
  8. }
  9. $klasse = new test;
  10. $klasse->username();
  11.  
  12. // en dit zou wel veilig zijn
  13. class test
  14. {
  15. public function username( $var )
  16. {
  17. echo $var;
  18. }
  19. }
  20.  
  21. $klasse = new test;
  22. $klasse->username( $_SESSION['username'] );

(ik wéét, je gebruikt geen "echo" in een klasse, maar dit is als voorbeeld)

Is het waar dat dit zo is?
Offline genkstar - 12/04/2010 19:52
Avatar van genkstar Nieuw lid Ik denk dat je het verkeerd heb gelezen, want ik zie géén verschil tussen beide.
Offline Raze - 12/04/2010 20:01
Avatar van Raze PHP beginner er is er wel degelijk één:

in de eerste klasse wordt er in een method de waarde van $_SESSION['username'] opgevraagd, in de 2de klasse wordt die meegegeven in een variabele.
Offline Joost - 12/04/2010 22:00
Avatar van Joost PHP expert Dat voorbeeld is fout omdat het een afhankelijkheid creeërt in je klasse, waardoor je hem niet meer zomaar kan hergebruiken 
Offline Button - 15/04/2010 10:11 (laatste wijziging 15/04/2010 13:51)
Avatar van Button PHP ver gevorderde Qua veiligheid zie ik niet in waarom dit fout is.

@Joost: afhankelijkheid in je klasse? Het zou simpel zijn om de sessionvar ter beschikking te stellen van de public user: sla de sessionvar op in een klassevar (public/private) en maak hem public via een getter.
Offline marten - 15/04/2010 14:22
Avatar van marten Beheerder Wat Joost bedoeld is het volgende:

Je hebt een methode gemaakt die een gebruikersnaam echoed. De ene keer wil je deze uit de sessie halen en een andere keer bijvoorbeeld uit een database of een xml bestand. Hier kan je beter voor zijn door de tweede keuze te gebruiken zodat je in de toekomst niet meer voor verassingen staat.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.267s