XII. 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_declared_interfaces -- Returns an array of all declared interfaces
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.
interface_exists -- Checks if the interface has been defined
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
property_exists --  Checks if the object or class has a property