Td corrigé php poo - Exercices corriges pdf

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.