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: