Introduction
Ces fonctions vous donnent des informations sur les objets et les
classes. Vous pouvez lire le nom de la classe qui est instanciée par un
objet, ainsi que la liste des membres et des méthodes. En utilisant ces
fonctions, vous pouvez non seulement connaitre la classe d'un objet,
mais aussi tous ses ascendants (i.e. la classe qui est étendue par une
autre classe).
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é.
Exemple 1. Fonctions d'objets : classes.inc
|
<?php
class Legume
{
var $edible;
var $color;
function Legume(
$edible,
$color="green"
) {
$this->edible
= $edible;
$this->color
= $color;
}
function is_edible()
{
return $this->edible;
}
function what_color()
{
return $this->color;
}
} class Epinard
extends Legume
{
var $cuit =
FALSE;
function Epinard()
{
$this->Legume(
TRUE,
"green" );
}
function cuisine()
{
$this->cuit
= TRUE;
}
function is_cooked()
{
return $this->cooked;
}
} ?>
|
|
Lorsqu'on instantie deux objets de ces classes et que l'on affiche
leurs informations, on affiche aussi leur héritage. On définit ici des
utilitaires qui servent essentiellement à afficher ces informations
proprement.
Exemple 2. Fonctions d'objets : test_script.php
|
<pre>
<?php
include "classes.inc";
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 "\tfonction
$method()\n";
}
function class_parentage($obj,
$class)
{
if (is_subclass_of($GLOBALS[$obj],
$class))
{
echo "L'objet
$obj appartient à la classe ".get_class($$obj);
echo "
est une sous-classe de $class\n";
} else {
echo "L'objet
$obj n'est pas une sous-classe de $class\n";
}
}
$veggie =
new Legume(true,"blue");
$leafy =
new Epinard();
echo "légume
: CLASS ".get_class($veggie)."\n";
echo "feuillues :
CLASS ".get_class($leafy);
echo ", PARENT
".get_parent_class($leafy)."\n";
echo "\nlégumes
: Propriétés\n";
print_vars($veggie);
echo "\nfeuillus
: Méthodes\n";
print_methods($leafy);
echo "\nParentée:\n";
class_parentage("leafy",
"Epinard");
class_parentage("leafy",
"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 :