Manuel PHP

Classes et Objets

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 connaître 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é-définies

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é.

Example#1 Fonctions d'objets : classes.inc

  1. <?php
  2.  
  3. // classe de base, avec ses membres et ses méthodes
  4. class Legume { 
  5.  
  6.    var $edible; 
  7.    var $color; 
  8.  
  9.    function Legume( $edible, $color="green" ) { 
  10.       $this->edible = $edible; 
  11.       $this->color = $color; 
  12.    } 
  13.  
  14.    function is_edible() { 
  15.       return $this->edible; 
  16.    } 
  17.  
  18.    function what_color() { 
  19.       return $this->color; 
  20.    } 
  21.    
  22. } // fin de la classe Legume
  23.  
  24. // Extension la classe de base
  25. class Epinard extends Legume { 
  26.    var $cuit = FALSE; 
  27.    function Epinard() { 
  28.       $this->Legume( TRUE, "green" ); 
  29.    } 
  30.    function cuisine() { 
  31.       $this->cuit = TRUE; 
  32.    } 
  33.  
  34.    function is_cooked() { 
  35.       return $this->cooked; 
  36.    } 
  37.    
  38. } // fin de la classe Epinard
  39.  
  40. ?> 

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.

Example#2 Fonctions d'objets : test_script.php

  1. <pre>
  2. <?php
  3.  
  4. include "classes.inc";  
  5.  
  6. // Fonctions utilitaires
  7. function print_vars($obj)  
  8. { 
  9.    foreach (get_object_vars($obj) as $prop => $val) { 
  10.       echo "\t$prop=$val\n"; 
  11.    }  
  12. }  
  13.  
  14. function print_methods($obj)  
  15. { 
  16.    $arr = get_class_methods(get_class($obj)); 
  17.    foreach ($arr as $method) { 
  18.       echo "\tfunction$method()\n"; 
  19.    }  
  20. }  
  21.  
  22. function class_parentage($obj, $class) { 
  23.    if (is_subclass_of($GLOBALS[$obj], $class)) { 
  24.       echo "L'objet$objappartient à la classe".get_class($$obj); 
  25.       echo "est une sous-classe de$class\n"; 
  26.    } else { 
  27.       echo "L'objet$objn'est pas une sous-classe de$class\n"; 
  28.    }  
  29. }  
  30.  
  31. // instantie 2 objets
  32.  
  33. $veggie = new Legume(true,"blue");  
  34. $leafy = new Epinard();  
  35.  
  36. // affiche les informations sur ces objets
  37. echo "légume : CLASS ".get_class($veggie)."\n";  
  38. echo "feuillues : CLASS ".get_class($leafy);  
  39. echo ", PARENT ".get_parent_class($leafy)."\n";  
  40.  
  41. // affiche les propriétés du légume
  42. echo "\nlégumes : Propriétés\n";  
  43. print_vars($veggie);  
  44.  
  45. // et les méthodes des feuillus
  46. echo "\nfeuillus : Méthodes\n";  
  47. print_methods($leafy);  
  48.  
  49. echo "\nParentée:\n";  
  50. class_parentage("leafy", "Epinard");  
  51. class_parentage("leafy", "Legume");  
  52. ?>
  53. </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

Table of Contents

L'éditeur javascript - CSS - Gentoo - Tutoriaux PHP - Tutoriels PHP - Php - Breizh Blog