Dans cet exemple, on définit une classe de base, et une
extension. La classe de base définit un légume, s'il est
mangeable ou pas, et sa couleur. La sous-classe
epinard ajoute une méthode pour le cuisiner,
et une autre pour savoir s'il est cuisiné.
classes.inc
<?php
// classe de base, avec ses membres et ses méthodes
class Legume {
var $mangeable;
var $couleur;
function legume( $mangeable, $couleur="green" ) {
$this->mangeable = $mangeable;
$this->couleur = $couleur;
}
function est_mangeable() {
return $this->mangeable;
}
function quelle_couleur() {
return $this->couleur;
}
} // fin de la classe Legume
// extend la classe de base
class Epinard extends Legume {
var $cuit = FALSE;
function Epinard() {
$this->Legume( TRUE, "green" );
}
function cuisine() {
$this->cuit = TRUE;
}
function est_cuit() {
return $this->cuit;
}
} // fin de la classe Epinard
?>
Lorsqu'on instantie deux objets de ces classes, et qu'on affiche
leurs informations, on affiche aussi leur héritage. On définit ici
des utilitaires qui servent essentiellement à afficher ces
informations proprement.
test_script.php
<pre>
<?php
include "classes.inc";
// utilitaires
function print_vars($obj) {
$arr = get_object_vars($obj);
while (list($prop, $val) = each($arr))
echo "\t$prop = $val\n";
}
function print_methods($obj) {
$arr = get_class_methods(get_class($obj));
foreach ($arr as $method)
echo "\tfunction $method()\n";
}
function class_parentage($obj, $class) {
global $$obj;
if (is_subclass_of($$obj, $class)) {
echo "L'objet $obj belongs to class ".get_class($$obj);
echo " est une sous-classe de $class\n";
} else {
echo "L'objet $obj n'est pas une sous classe $class\n";
}
}
// instantie 2 objets
$legume = new Legume(TRUE,"blue");
$feuilles = new Epinard();
// affiche les informations sur ces objets
echo "legume: CLASS ".get_class($legume)."\n";
echo "feuilles: CLASS ".get_class($feuilles);
echo ", PARENT ".get_parent_class($feuilles)."\n";
// affiche les propriétés du légume
echo "\nlégume: Propriétés \n";
print_vars($legume);
// et les méthodes de "feuilles"
echo "\nfeuilles: Methods\n";
print_methods($feuilles);
echo "\nParentée:\n";
class_parentage("feuilles", "Epinard");
class_parentage("feuilles", "Legume");
?>
</pre>
Il est important de noter que dans les exemples ci-dessus, les objets
$feuilles sont une instance de
Epinard qui est une sous-classe de
Legume, donc la dernière partie du script
va afficher :
[...]
Parentée:
L'objet feuilles n'est pas une sous classe Spinach
L'objet feuilles est une sous-classe de Legume