php poo - Exercices corriges
3.1.3 Fonctions génératrices ordinaires et exponentielles .... principe général de l'
héritage multiple: pseudo-héritage multiple (en JAVA/SMALLTALK), vrai héritage
multiple (en Eiffel/C++) ..... Responsable : J-H Réty (7 h Cours, 7 h TD, 7 h TP).
part of the document
PHP
Et
POO
TABLE DES MATIERES
TOC \o "1-3" \h \z HYPERLINK \l "_Toc260736849" Chapitre 1 LES CLASSES ET LES OBJETS PAGEREF _Toc260736849 \h 4
HYPERLINK \l "_Toc260736850" 1.1 Présentation générale PAGEREF _Toc260736850 \h 5
HYPERLINK \l "_Toc260736851" 1.1.1 Généralités PAGEREF _Toc260736851 \h 5
HYPERLINK \l "_Toc260736852" 1.1.2 Représentation graphique PAGEREF _Toc260736852 \h 5
HYPERLINK \l "_Toc260736853" 1.1.3 Les objets PAGEREF _Toc260736853 \h 5
HYPERLINK \l "_Toc260736854" 1.1.4 Principales caractéristiques objet de PHP5 PAGEREF _Toc260736854 \h 5
HYPERLINK \l "_Toc260736855" 1.2 Les classes en PHP 5 PAGEREF _Toc260736855 \h 6
HYPERLINK \l "_Toc260736856" 1.2.1 Syntaxe de définition d'une classe PAGEREF _Toc260736856 \h 6
HYPERLINK \l "_Toc260736857" 1.2.2 Les propriétés et les méthodes PAGEREF _Toc260736857 \h 6
HYPERLINK \l "_Toc260736858" 1.2.3 Instantiation d'un objet PAGEREF _Toc260736858 \h 8
HYPERLINK \l "_Toc260736859" 1.2.4 Exemple complet PAGEREF _Toc260736859 \h 9
HYPERLINK \l "_Toc260736860" 1.2.5 Portée des attributs et des méthodes PAGEREF _Toc260736860 \h 10
HYPERLINK \l "_Toc260736861" 1.2.6 Le polymorphisme en PHP PAGEREF _Toc260736861 \h 11
HYPERLINK \l "_Toc260736862" 1.3 Les accesseurs (__set et __get) PAGEREF _Toc260736862 \h 13
HYPERLINK \l "_Toc260736863" 1.4 Les constructeurs (__construct) PAGEREF _Toc260736863 \h 14
HYPERLINK \l "_Toc260736864" 1.4.1 Définition PAGEREF _Toc260736864 \h 14
HYPERLINK \l "_Toc260736865" 1.4.2 Exemple PAGEREF _Toc260736865 \h 14
HYPERLINK \l "_Toc260736866" 1.5 Les destructeurs (__destruct) PAGEREF _Toc260736866 \h 15
HYPERLINK \l "_Toc260736867" 1.6 L'héritage PAGEREF _Toc260736867 \h 16
HYPERLINK \l "_Toc260736868" 1.6.1 Définition PAGEREF _Toc260736868 \h 16
HYPERLINK \l "_Toc260736869" 1.6.2 Représentation graphique PAGEREF _Toc260736869 \h 16
HYPERLINK \l "_Toc260736870" 1.6.3 Syntaxe PAGEREF _Toc260736870 \h 16
HYPERLINK \l "_Toc260736871" 1.6.4 Exemple complet PAGEREF _Toc260736871 \h 17
HYPERLINK \l "_Toc260736872" 1.6.5 Héritage et surcharge PAGEREF _Toc260736872 \h 18
HYPERLINK \l "_Toc260736873" 1.6.6 Héritage et transtypage PAGEREF _Toc260736873 \h 20
HYPERLINK \l "_Toc260736874" 1.7 Compléments PAGEREF _Toc260736874 \h 23
HYPERLINK \l "_Toc260736875" 1.7.1 Les constantes de classe PAGEREF _Toc260736875 \h 23
HYPERLINK \l "_Toc260736876" 1.7.2 Les opérateurs parent, self et :: PAGEREF _Toc260736876 \h 24
HYPERLINK \l "_Toc260736877" 1.7.3 Méthode statique, variable statique PAGEREF _Toc260736877 \h 25
HYPERLINK \l "_Toc260736878" 1.7.4 Classe abstraite PAGEREF _Toc260736878 \h 33
HYPERLINK \l "_Toc260736879" 1.7.5 Classes et méthodes Final PAGEREF _Toc260736879 \h 36
HYPERLINK \l "_Toc260736880" 1.8 Linéariser les objets (Sérialiser, désérialiser) PAGEREF _Toc260736880 \h 38
HYPERLINK \l "_Toc260736881" 1.8.1 La sérialisation PAGEREF _Toc260736881 \h 38
HYPERLINK \l "_Toc260736882" 1.8.2 La désérialisation PAGEREF _Toc260736882 \h 38
HYPERLINK \l "_Toc260736883" 1.8.3 Sérialisation et désérialisation Fichier PAGEREF _Toc260736883 \h 39
HYPERLINK \l "_Toc260736884" 1.8.4 Sérialisations et désérialisations Fichier PAGEREF _Toc260736884 \h 40
HYPERLINK \l "_Toc260736885" 1.8.5 Les méthodes __sleep() et __wakeup(). PAGEREF _Toc260736885 \h 43
HYPERLINK \l "_Toc260736886" 1.9 Les interfaces PAGEREF _Toc260736886 \h 46
HYPERLINK \l "_Toc260736887" 1.10 Parcourir les membres d'une classe PAGEREF _Toc260736887 \h 51
HYPERLINK \l "_Toc260736888" 1.10.1 Via une méthode interne PAGEREF _Toc260736888 \h 51
HYPERLINK \l "_Toc260736889" 1.10.2 Via la fonction get_object_vars($objet) PAGEREF _Toc260736889 \h 52
HYPERLINK \l "_Toc260736890" 1.10.3 Via l'interface Iterator de PHP PAGEREF _Toc260736890 \h 53
HYPERLINK \l "_Toc260736891" 1.11 DIVERS PAGEREF _Toc260736891 \h 56
HYPERLINK \l "_Toc260736892" 1.11.1 Les méthodes magiques PAGEREF _Toc260736892 \h 56
HYPERLINK \l "_Toc260736893" 1.11.2 La méthode __toString() PAGEREF _Toc260736893 \h 56
HYPERLINK \l "_Toc260736894" 1.11.3 Cloner un objet PAGEREF _Toc260736894 \h 57
HYPERLINK \l "_Toc260736895" 1.11.4 La méthode __call(methode, arguments) PAGEREF _Toc260736895 \h 58
HYPERLINK \l "_Toc260736896" 1.11.5 L'héritage et les méthodes __set() et __get(). PAGEREF _Toc260736896 \h 62
HYPERLINK \l "_Toc260736897" 1.11.6 La fonction __autoload() PAGEREF _Toc260736897 \h 63
HYPERLINK \l "_Toc260736898" 1.11.7 Méthodes diverses PAGEREF _Toc260736898 \h 65
HYPERLINK \l "_Toc260736899" 1.11.8 La comparaison d'objets PAGEREF _Toc260736899 \h 69
HYPERLINK \l "_Toc260736900" 1.12 Relations Inter-Classes : Association, Agrégation et Composition PAGEREF _Toc260736900 \h 70
HYPERLINK \l "_Toc260736901" 1.12.1 Association binaire de type Père-Fils PAGEREF _Toc260736901 \h 71
HYPERLINK \l "_Toc260736902" 1.12.2 Association binaire PAGEREF _Toc260736902 \h 73
HYPERLINK \l "_Toc260736903" 1.12.3 Association n-aires PAGEREF _Toc260736903 \h 76
HYPERLINK \l "_Toc260736904" 1.12.4 Association avec une classe d'association PAGEREF _Toc260736904 \h 77
HYPERLINK \l "_Toc260736905" 1.12.5 Comparaison Agrégation-Composition PAGEREF _Toc260736905 \h 78
HYPERLINK \l "_Toc260736906" 1.12.6 Agrégation PAGEREF _Toc260736906 \h 79
HYPERLINK \l "_Toc260736907" 1.12.7 Composition PAGEREF _Toc260736907 \h 82
HYPERLINK \l "_Toc260736908" 1.13 POO ET GESTION DES EXCEPTIONS PAGEREF _Toc260736908 \h 86
HYPERLINK \l "_Toc260736909" 1.13.1 Rappel sur la gestion des erreurs avec PHP PAGEREF _Toc260736909 \h 86
HYPERLINK \l "_Toc260736910" 1.13.2 Introduction à la gestion d'exception PAGEREF _Toc260736910 \h 91
HYPERLINK \l "_Toc260736911" 1.13.3 Créez votre propre classe d'Exception. PAGEREF _Toc260736911 \h 93
HYPERLINK \l "_Toc260736912" 1.13.4 Levée d'exception automatisée PAGEREF _Toc260736912 \h 96
HYPERLINK \l "_Toc260736913" 1.13.5 Levée d'exception centralisée PAGEREF _Toc260736913 \h 100
LES CLASSES ET LES OBJETS
Présentation générale
Généralités
Les classes sont des représentations abstraites des objets du monde.
Une classe doit représenter les caractéristiques statiques et dynamiques des objets.
Elle les encapsule.
Les caractéristiques statiques sont représentées au moyen d'attributs ou de propriétés.
Les caractéristiques dynamiques sont représentées au moyen d'opérations ou de méthodes.
La POO met en place les mécanismes d'héritage.
Pour explorer tous les concepts cf la POO (Programmation Orientée Objet) et la méthode UML (Unified Modeling Language).
Représentation graphique
La représentation graphique (cf UML) est réalisée via un rectangle à 3 compartiments.
EMBED MSPhotoEd.3
Les objets
Un objet est une instanciation d'une classe.
Principales caractéristiques objet de PHP5
Class et new,
This, ::Self, ::parent,
Portées : public, protected, private,
Méthodes __construct et __destruct,
Héritage simple via extends,
Surchage éventuellement avec polymorphisme - mais pas de polymorphisme de même niveau,
Propriétés et méthodes static,
Classes abstraites et classes final,
Interfaces via Interface et implements,
Méthodes __set, __get pour affecter et récupérer des valeurs d'attributs
et autres méthodes magiques.
NB : Pour les différences entre PHP4 et PHP5 cf annexe.
Les classes en PHP 5
Syntaxe de définition d'une classe
Par convention les noms des classes commencent par une majuscule et sont camélisés.
La classe est enregistrée dans un fichier de même nom.
class NomDeClasse
{
}
Les propriétés et les méthodes
Les propriétés
Les propriétés sont déclarées avec le mot réservé public ou private ou protected.
QualificateurDePortée $nomDePropriété;
This est le pronom qui représente l'objet instancié.
La référence à une propriété ou à une méthode est réalisée avec l'opérateur -> (Notation pointée ().
Les méthodes
Les méthodes reprennent la syntaxe des fonctions avec un qualificateur de portée.
Remarques
Par convention les noms des attributs/propriétés et des opérations/méthodes commencent par une minuscule et sont camélisés.
Exemple de classe
class Personne
{
// --- Propriétés
private $nom;
private $age;
// --- Méthodes
public function affecterNom($nom) { $this->nom = $nom; }
public function recupererNom() { return $this->nom; }
public function affecterAge($age) { $this->age = $age; }
public function recupererAge() { return $this->age; }
}
Instantiation d'un objet
L'instantiation d'un objet à partir d'une classe s'effectue avec le mot clé new.
On affecte le nouvel objet à une variable.
$variable = new NomDeClasse();
Exemple d'instantiation
$tintin = new Personne();
Exemple complet
Par convention (Sans aucune obligation) une classe sera stockée dans un fichier php. Le nom du fichier sera identique au nom de la classe.