SommaireTelecharger la documentationChapitre suivantChapitre precedent  

 
Raccourci :  
Objets

Introduction
About
Exemple d'utilisation
call_user_method
call_user_method_array
class_exists
get_class
get_class_methods
get_class_vars
get_declared_classes
get_object_vars
get_parent_class
is_subclass_of
method_exists

8.4.1.2 Exemple d'utilisation
[Notes en ligne] 

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
    



Chapitre précédentChapitre suivantAccueil nexen.net