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).
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.
Example#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.
Example#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