IX. Klasse/Object Functies

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 :

 
[

 
..

 
.

 
]

 
Ouderschap

 
:




 
Object

 
$blaadje

 
behoort

 
niet

 
tot

 
een

 
subklasse

 
van

 
Spinazie

 
Object

 
$blaadje

 
behoort

 
tot

 
klasse

 
Spinazie

 
een

 
subkklasse

 
van

 
Groente





Inhoudsopgave
call_user_method_array -- Roept een door de programmeur gedefinieerde methode aan met een array van parameters [vervangen].
call_user_method -- Roept een methode aan op een door de programmeur gespecificeerd object [vervangen]
class_exists -- Controleert of de gegeven naam bestaat als klasse
get_class_methods -- Retourneert een array met de namen van methodes van een klasse
get_class_vars -- Retourneert een array met alle eigenschappen van een klasse.
get_class -- Retourneert de naam van de klasse waarvan het gegeven object geïnstantieerd is.
get_declared_classes -- Retourneert een array met de namen van alle gedefinieerde klassen.
get_object_vars -- Retourneert een array met alle eigenschappen van een object
get_parent_class -- Retourneert de klasse naam van de ouder van het gegeven object of klasse naam.
is_a -- Retourneert TRUE als het gegeven object tot deze klasse behoort of als de klasse een van de ouders is.
is_subclass_of -- Retourneert TRUE als het object deze klasse als een van z'n ouders heeft.
method_exists -- Controleert of de gegeven methode in een klasse definitie voorkomt