Forum und email

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.

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->Groentetrue"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

Table of Contents

  • 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