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).
Pré-requis
Ces fonctions sont disponibles dans le module PHP standard, qui est toujours accessible.
Installation
Il n'y pas d'installation nécessaire pour utiliser ces fonctions, elles font parties du coeur de PHP.
Configuration à l'exécution
Cette extension ne définit aucune directive de configuration.
Types de ressources
Cette extension ne définit aucune ressource.
Constantes prédefinies
Cette extension ne définit aucune constante.
Exemples
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
// 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 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";
// Fonctions 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 "\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"; } }
// 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 :