[PHP] OOP: Abstract Classes

Pagina: 1
Acties:
  • 695 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hiya,

Ik ben bezig OOP in PHP onder de knie te krijgen, nu las ik op PHPbuilder.com in een OOP artikel hetvolgende:
A nice mechanism in OOP is to use Abstract Classes, abstract classes are classes that are not instanciable and has the only purpose to define an interface for its derived classes. Designers often use Abstract classes to force programmers to derive classes from certain base classes so they can be certain that the new classes have some desired functionality. There's no standard way to do that in PHP but:...
Na het lezen hiervan snap ik nog niet precies wat zo'n abstract class is en wat nu zo fijn/belangrijk eraan is dat 'designers' het veel gebruiken..

alvast bedankt

Grtz,
Nighteye

Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-08 02:59

Gerco

Professional Newbie

Een abstract class is een class waar wel instaat dat er bepaalde methods inzitten, maar de implementatie ervan is niet gedefinieerd.

Om zo'n klasse te gebruiken moet je die methods dus overriden en de implementatie ervan maken. Dit kan handig zijn als je een bepaalde "interface" wilt kunnen gebruiken voor een aantal verschillende klasses.

Bijvoorbeeld voor DB toegang kun je een abstract class maken met de methods "connect()", "query()" en "disconnect()", in de derived classes vul je dan de implementie van die methods in en nu kun je in je programma gebruik maken van een database zonder te weten welke van de derived classes (dus welke database) je gebruikt, dat maakt namelijk niet uit, ze werken allemaal op dezelfde manier.

Nu kun je eenvoudig je programma gebruik laten maken van een hele andere database door gewoon een andere derived class te gebruiken, maar je code hoeft daarvoor niet of nauwelijks te veranderen.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

daar zou ik aan toe willen voegen dat het in PHP uberhaupt geen enkele zin heeft om abstract classes te maken, want PHP heeft namelijk geen typechecking.
ik wil dit wil toelichten, maar nu ff niet :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-08 02:59

Gerco

Professional Newbie

Op dinsdag 22 januari 2002 10:05 schreef drm het volgende:
daar zou ik aan toe willen voegen dat het in PHP uberhaupt geen enkele zin heeft om abstract classes te maken, want PHP heeft namelijk geen typechecking.
Daar ben ik het BIJNA mee eens, ware het niet dat het toch wel een handige manier is om een interface vast te leggen, ook al trekt PHP zich er geen moer van aan. In een abstract class kan ook code staan (in Java wel iig) die gedeeld wordt door alle derived classes. In dat opzicht zijn ze wel degelijk handig.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Gerco:
Daar ben ik het BIJNA mee eens, ware het niet dat het toch wel een handige manier is om een interface vast te leggen, ook al trekt PHP zich er geen moer van aan. In een abstract class kan ook code staan (in Java wel iig) die gedeeld wordt door alle derived classes. In dat opzicht zijn ze wel degelijk handig.
Als er code in staat kun je je afvragen of je het nog wel over een abstract class hebt ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 19-09 22:18

chem

Reist de wereld rond

wellicht niet vermeld of toch wel :) maar het is eenvoudig om te checken of een class wel een extended class is:
PHP:
1
2
3
<?
if(get_parent_class ($this) == 'myClass') {..}
?>

of:
PHP:
1
2
3
<?
if(is_subclass_of($this,'myClass')) {..}
?>

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-08 02:59

Gerco

Professional Newbie

Op dinsdag 22 januari 2002 10:24 schreef drm het volgende:
Als er code in staat kun je je afvragen of je het nog wel over een abstract class hebt ;)
Er hoeft geen code in ALLE methods te staan... alleen de methods die voor alle derived klassen hetzelfde is maar niet kan werken zonder de code in de abstract methods.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hartelijk dank voor jullie uitleg, het is me nu wat duidelijker geworden..

heeft iemand ergens een source voorbeeld op een site staan ofzo? alvast bedankt!

Grtz,
Nighteye

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 19-09 22:18

chem

Reist de wereld rond

Op dinsdag 22 januari 2002 11:02 schreef Nighteye het volgende:
hartelijk dank voor jullie uitleg, het is me nu wat duidelijker geworden..

heeft iemand ergens een source voorbeeld op een site staan ofzo? alvast bedankt!

Grtz,
Nighteye
nee, helaas niet. btw je hoeft niet onderaan je bericht je naam en grtz etc. te zetten.

Maar ik weet wel dat er een aantal DBA layers zijn die je verplichten te extenden in php... namen ontschieten me hier...

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Op dinsdag 22 januari 2002 11:04 schreef chem het volgende:

nee, helaas niet. btw je hoeft niet onderaan je bericht je naam en grtz etc. te zetten.
Groetjes dan? ;)

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 19-09 22:18

chem

Reist de wereld rond

Op dinsdag 22 januari 2002 11:06 schreef Nighteye het volgende:

[..]

Groetjes dan? ;)
helemaal nix :+
check de faq... :)

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-08 02:59

Gerco

Professional Newbie

Op dinsdag 22 januari 2002 11:07 schreef chem het volgende:
check de faq... :)
oho stouterd, dat zouden we niet meer doen zonder linkje of een quote:
Wij tweakers doen elkaar permanent de groeten. Het is dus niet nodig om steeds ruimteverspillende "greetz [user]" of iets dergelijks onder je post te plakken. Als je perse zoiets wilt kun je daar je signature voor gebruiken (zie latere uitleg).

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

  • TheDane
  • Registratie: Oktober 2000
  • Laatst online: 22:34

TheDane

1.618

Op dinsdag 22 januari 2002 11:02 schreef Nighteye het volgende:
hartelijk dank voor jullie uitleg, het is me nu wat duidelijker geworden..

heeft iemand ergens een source voorbeeld op een site staan ofzo? alvast bedankt!
zoek maar eens op phplib, denk dat je daar heel veel aan kunt hebben ..

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op dinsdag 22 januari 2002 11:10 schreef Gerco het volgende:
oho stouterd, dat zouden we niet meer doen zonder linkje of een quote:
Voor mods gelden andere regels :+
Pagina: 1