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 connaître la classe d'un objet, mais aussi tous ses ascendants (i.e. la classe qui est étendue par une autre classe).
Ces fonctions sont disponibles dans le module PHP standard, qui est toujours accessible.
Il n'y pas d'installation nécessaire pour utiliser ces fonctions, elles font parties du coeur de PHP.
Cette extension ne définit aucune directive de configuration.
Cette extension ne définit aucune ressource.
Cette extension ne définit aucune constante.
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 515. Fonctions d'objets : classes.inc
<?php
// classe de base, avec ses membres et ses méthodes
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
;
}
}
// fin de la classe Legume
// Extension la classe de base
class
Epinard
extends
Legume
{
var
$cuit
=
FALSE
;
function
Epinard
() {
$this
->
Legume
(
TRUE
,
"green"
);
}
function
cuisine
() {
$this
->
cuit
=
TRUE
;
}
function
is_cooked
() {
return
$this
->
cooked
;
}
}
// fin de la classe Epinard
?>
Lorsqu'on instancie 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 516. Fonctions d'objets : test_script.php
<pre>
<?php
include
"classes.inc"
;
// Fonctions utilitaires
function
print_vars
(
$obj
)
{
foreach (
get_object_vars
(
$obj
) as
$prop
=>
$val
) {
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
) {
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"
;
}
}
// instantie 2 objets
$veggie
= new
Legume
(
true
,
"blue"
);
$leafy
= new
Epinard
();
// affiche les informations sur ces objets
echo
"légume : CLASS "
.
get_class
(
$veggie
).
"\n"
;
echo
"feuillues : CLASS "
.
get_class
(
$leafy
);
echo
", PARENT "
.
get_parent_class
(
$leafy
).
"\n"
;
// affiche les propriétés du légume
echo
"\nlégumes : Propriétés\n"
;
print_vars
(
$veggie
);
// et les méthodes des feuillus
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 :
[...] Parentée: L'objet feuilles n'est pas une sous classe epinard L'objet feuilles est une sous-classe de Legume