Introductie
Deze
functies
stellen
je
in
staat
informatie
op
te
vragen
over
klassen
en
geïnstantieerde
objecten
.
Je
kunt
bijvoorbeeld
de
naam
van
een
klasse
waartoe
een
object
behoort
opvragen
of
alle
eigenschappen
en
namen
van
methoden
.
Met
deze
functies
kun
je
niet
alleen
de
namen
van
de
klasse
opvragen
maar
ook
hoe
zijn
familie
(
door
overerving
)
er
uit
ziet
(bijv
.
opvragen
wat
de
ouder
van
een
bepaald
object
is
)
.
Voorbeelden
In
dit
voorbeeld
definiëren
we
een
basis
klasse
en
een
uitbreiding
daarop
.
De
basis
klasse
Groente
beschrijft
een
groente
;
of
deze
eetbaar
is
en
wat
zijn
kleur
is
.
De
subklasse
Spinazie
voegt
een
methode
toe
om
deze
groente
te
koken
en
om
er
achter
te
komen
of
deze
reeds
gekookt
is
.
Voorbeeld
1
.
klassen.inc
?php
/
*
Basis
klasse
met
eigenschappen
en
methoden
*
/
class
Groente
{
var
$eetbaar
;
var
$kleur
;
function
Groente
(
$eetbaar
,
$kleur="groen
"
)
{
$this
-
eetbaar
=
$eetbaar
;
$this
-
kleur
=
$kleur
;
}
function
is_eetbaar(
)
{
return
$this
-
eetbaar
;
}
function
welke_kleur(
)
{
return
$this
-
kleur
;
}
}
/
*
Einde
van
klasse
Groente
*
/
/
*
De
klasse
Spinazie
breidt
de
basis
klasse
uit
.
*
/
class
Spinazie
extends
Groente
{
var
$gekookt
=
false
;
function
Spinazie(
)
{
$this
-
Groente
(
true
,
"groen
"
)
;
}
function
koken(
)
{
$this
-
gekookt
=
true
;
}
function
is_gekookt(
)
{
return
$this
-
gekookt
;
}
}
/
*
Einde
van
klasse
Spinazie
*
/
?
|
|
Vervolgens
instantiëren
we
2
objecten
van
deze
klassen
en
geven
wat
informatie
over
hun
weer
,
waaronder
hun
ouderschap
.
We
definiëren
ook
wat
handige
functies
,
maar
deze
dienen
enkel
om
de
informatie
mooi
weer
te
geven
.
Voorbeeld
2
.
test_script.php
pre
?php
include
"
klassen.inc"
;
/
*
Handige
functies
*
/
function
print_vars($obj
)
{
$eigenschappen
=
get_object_vars($obj)
;
while
(list($eigenschap
,
$waarde
)
=
each($eigenschappen)
)
echo
"\t$eigenschap
=
$waarde\n"
;
}
function
print_methoden($obj
)
{
$methoden
=
get_class_methods(get_class($obj))
;
foreach
($methoden
as
$methode_naam
)
echo
"\tfunction
$methode_naam()\n"
;
}
function
klasse_ouderschap($obj
,
$klasse
)
{
global
$$obj
;
if
(is_subklasse_of($$obj
,
$klasse)
)
{
echo
"Object
$obj
behoort
toe
klasse
".get_class($$obj)
;
echo
"
een
subklasse
van
$klasse\n"
;
}
else
{
echo
"Object
$obj
behoort
niet
tot
een
subklasse
van
$klasse\n"
;
}
}
/
/
Maak
2
objecten
$groente
=
new
Groente(true
,"blauw")
;
$blaadje
=
new
Spinazie()
;
/
/
Geef
informatie
over
de
objecten
weer
.
echo
"\$groente
:
KLASSE
"
.
get_class($groente
)
.
"\n"
;
echo
"\$blaadje
:
KLASSE
"
.
get_class($blaadje
)
.
"\n"
;
echo
"
,
OUDER
"
.
get_parent_class($blaadje
)
.
"\n"
;
/
/
Geef
eigenschappen
van
$groente
weer
echo
"\n\$groente
:
Eigenschappen\n"
;
print_vars($groete)
;
/
/
Geef
de
namen
van
de
methoden
van
$groente
weer
echo
"\nblaadje
:
Methoden\n"
;
print_methoden($blaadje)
;
echo
"\nOuderschap:\n"
;
klasse_ouderschap('blaadje'
,
'Spinazie')
;
klasse_ouderschap('blaady'
,
'Groente')
;
?
/
pre
|
|
Het
is
belangrijk
om
te
onthouden
dat
in
bovenstaand
voorbeeld
,
het
object
$blaadje
een
instantie
is
van
de
klasse
Spinazie
welke
een
subklasse
van
Groente
is
.
Daarom
zal
het
script
de
volgende
output
geven
: