Dans cet exemple, nous commençons par définir une classe de base ainsi qu'une extension de cette classe. La classe de base décrit un légume, s'il peut être consommé, et quelle est sa couleur. La sous-classe Spinach ajoute une méthode pour le cuisiner, et une autre pour déterminer s'il est cuit.
Exemple #1 Définitions des Classes
Vegetable
<?php
class Vegetable {
public $edible;
public $color;
public function __construct($edible, $color = "green")
{
$this->edible = $edible;
$this->color = $color;
}
public function isEdible()
{
return $this->edible;
}
public function getColor()
{
return $this->color;
}
}
?>Spinach
<?php
class Spinach extends Vegetable {
public $cooked = false;
public function __construct()
{
parent::__construct(true, "green");
}
public function cook()
{
$this->cooked = true;
}
public function isCooked()
{
return $this->cooked;
}
}
?>Nous créons ensuite deux objets depuis ces classes et affichons des informations sur ceux-ci, incluant leur classe parente. Nous définissons également des fonctions utilitaires, principalement afin d'obtenir un affichage plus joli des variables.
Exemple #2 test_script.php
<?php
// enregistrer l'autoloader pour charger les classes
spl_autoload_register();
function printProperties($obj)
{
foreach (get_object_vars($obj) as $prop => $val) {
echo "\t$prop = $val\n";
}
}
function printMethods($obj)
{
$arr = get_class_methods(get_class($obj));
foreach ($arr as $method) {
echo "\tfunction $method()\n";
}
}
function objectBelongsTo($obj, $class)
{
if (is_subclass_of($obj, $class)) {
echo "L'objet appartient à la classe " . get_class($obj);
echo ", une sous-classe de $class\n";
} else {
echo "L'objet n'appartient pas à une sous-classe de $class\n";
}
}
// instancier 2 objets
$veggie = new Vegetable(true, "blue");
$leafy = new Spinach();
// afficher des informations sur les objets
echo "veggie : CLASSE " . get_class($veggie) . "\n";
echo "leafy : CLASSE " . get_class($leafy);
echo ", PARENT " . get_parent_class($leafy) . "\n";
// afficher les propriétés de veggie
echo "\nveggie : Propriétés\n";
printProperties($veggie);
// et les méthodes de leafy
echo "\nleafy : Méthodes\n";
printMethods($leafy);
echo "\nParenté :\n";
objectBelongsTo($leafy, Spinach::class);
objectBelongsTo($leafy, Vegetable::class);
?>Les exemples ci-dessus vont afficher :
veggie : CLASSE Vegetable
leafy : CLASSE Spinach, PARENT Vegetable
veggie : Propriétés
edible = 1
color = blue
leafy : Méthodes
function __construct()
function cook()
function isCooked()
function isEdible()
function getColor()
Parenté :
L'objet n'appartient pas à une sous-classe de Spinach
L'objet appartient à la classe Spinach, une sous-classe de Vegetable
Une chose importante à noter dans l'exemple ci-dessus est que l'objet $leafy est une instance de la classe Spinach qui est une sous-classe de Vegetable.