33
23:47:36 23:47:36 Programmation Web 2011-2012 Programmation Web 2011-2012 1 PHP objet PHP objet Jérôme CUTRONA Jérôme CUTRONA [email protected] [email protected]

11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA [email protected]

Embed Size (px)

Citation preview

Page 1: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

03:24:5103:24:51 Programmation Web 2011-2012Programmation Web 2011-2012 11

PHP objetPHP objet

Jérôme CUTRONAJérôme CUTRONA

[email protected]@univ-reims.fr

Page 2: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

Développement objetDéveloppement objet

Définition de Définition de briques logiciellesbriques logicielles représentant un représentant un concept, une idée ou une entité ainsi que leurs concept, une idée ou une entité ainsi que leurs interactions : les objetsinteractions : les objets

Un objet est une Un objet est une structure de donnéesstructure de données comprenant également les comprenant également les fonctionnalitésfonctionnalités de de traitement des donnéestraitement des données

L’objet est vu au travers de ses L’objet est vu au travers de ses spécificationsspécifications Les concepts associés sont :Les concepts associés sont :

EncapsulationEncapsulation HéritageHéritage PolymorphismePolymorphisme

2203:24:5103:24:51 Programmation Web 2011-2012Programmation Web 2011-2012

Page 3: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

ClasseClasse

Une Une classe définit un modèleclasse définit un modèle, un moule, à partir , un moule, à partir duquel tous les objets de classe seront créésduquel tous les objets de classe seront créés

La classe décrit les La classe décrit les données internesdonnées internes ainsi que ainsi que les les fonctionnalités fonctionnalités des objetsdes objets

La La classe est une vision « inerte »classe est une vision « inerte », une recette , une recette de cuisine, visant à décrire la structure et le de cuisine, visant à décrire la structure et le comportement des objets qui seront crééscomportement des objets qui seront créés

La La construction d’un objetconstruction d’un objet à partir de la classe à partir de la classe génératrice s’appelle génératrice s’appelle instanciationinstanciation

Les Les objetsobjets, entités « vivantes » en mémoire,, entités « vivantes » en mémoire, sont des instancessont des instances de la classe de la classe

3303:24:5103:24:51 Programmation Web 2011-2012Programmation Web 2011-2012

Page 4: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

InstanciationInstanciation

La classe est une description « inerte »La classe est une description « inerte »

Les objets doivent être instanciés à partir de la Les objets doivent être instanciés à partir de la classe génératrice pour exister et devenir classe génératrice pour exister et devenir fonctionnelsfonctionnels

Exemple : la classe AnimalExemple : la classe Animal$bambi = new Animal() ;$bambi = new Animal() ;$scrat = new Animal() ;$scrat = new Animal() ;$melman = new Animal() ;$melman = new Animal() ;

4403:24:5103:24:51 Programmation Web 2011-2012Programmation Web 2011-2012

Page 5: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

EncapsulationEncapsulation

Procédé consistant à Procédé consistant à rassembler les données et rassembler les données et les traitements au sein des objetsles traitements au sein des objets

L’L’implémentation interneimplémentation interne des objets est des objets est cachéecachée Les objets sont vu à travers leurs Les objets sont vu à travers leurs spécificationsspécifications Les données internes et les fonctionnalités Les données internes et les fonctionnalités

possèdent un possèdent un niveau de visibiliténiveau de visibilité et peuvent et peuvent éventuellement être masquées :éventuellement être masquées : Public Public PrivéPrivé ProtégéProtégé

5503:24:5103:24:51 Programmation Web 2011-2012Programmation Web 2011-2012

Page 6: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

EncapsulationEncapsulation

Les Les données internesdonnées internes des objets sont appelées des objets sont appelées attributsattributs

Les Les fonctionnalitésfonctionnalités des objets sont appelées des objets sont appelées méthodesméthodes

Méthodes habituelles :Méthodes habituelles : ConstructeurConstructeur / / destructeurdestructeur AccesseursAccesseurs / / modificateursmodificateurs (getters / setters) (getters / setters)

Référence à l’objet courant dans la description Référence à l’objet courant dans la description de la classe : de la classe : $this$this

6603:24:5203:24:52 Programmation Web 2011-2012Programmation Web 2011-2012

Page 7: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

VisibilitéVisibilité

PubliquePublique : :Les données internes et les méthodes sont Les données internes et les méthodes sont accessibles par tousaccessibles par tous

ProtégéProtégé : :Les données internes et les méthodes sont Les données internes et les méthodes sont accessibles aux objets dérivésaccessibles aux objets dérivés

PrivéPrivé : :Les données internes et les méthodes ne sont Les données internes et les méthodes ne sont accessibles qu’aux objets de la classeaccessibles qu’aux objets de la classe

7703:24:5203:24:52 Programmation Web 2011-2012Programmation Web 2011-2012

Page 8: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

Héritage ou dérivation ou extensionHéritage ou dérivation ou extension

Création de Création de nouvellesnouvelles classesclasses àà partirpartir du modèle du modèle d’uned’une classeclasse existanteexistante

La nouvelle classe possède La nouvelle classe possède toustous lesles attributsattributs etet méthodes de la classe mèreméthodes de la classe mère

La nouvelle classe peut proposer de La nouvelle classe peut proposer de nouveauxnouveaux attributsattributs et de et de nouvellesnouvelles méthodesméthodes ou ou spécialiserspécialiser desdes méthodesméthodes de la classe mère de la classe mère

8803:24:5203:24:52 Programmation Web 2011-2012Programmation Web 2011-2012

Im pa la C a rib ou

H e rb ivo re

G u ép a rd L éo pa rd

C a rn ivo re

M a m m ifè re

Page 9: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

PolymorphismePolymorphisme

Choix dynamique de la méthode qui correspond Choix dynamique de la méthode qui correspond au type réel de l’objetau type réel de l’objet

Méthode mange()Méthode mange()

function nourriture(Mammifere $m) {function nourriture(Mammifere $m) {return $m->mange() ;return $m->mange() ;

}} $i = new Impala() ; nourriture($i) ;$i = new Impala() ; nourriture($i) ; $c = new Carnivore() ; nourriture($c) ;$c = new Carnivore() ; nourriture($c) ;

9903:24:5203:24:52 Programmation Web 2011-2012Programmation Web 2011-2012

Im pa lah erbe

C a rib oum o usse

H e rb ivo rep la n tes

G u ép a rdim p a la

L éo pa rdim p a la

C a rn ivo rev ian de

M a m m ifè ren o u rritu re

herbeherbe

viandeviande

Page 10: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

101003:24:5203:24:52 Programmation Web 2011-2012Programmation Web 2011-2012

Développement objet en PHPDéveloppement objet en PHP

PHP 4PHP 4 Classes (tout est public)Classes (tout est public) ConstructeurConstructeur HéritageHéritage Méthodes statiques implicitesMéthodes statiques implicites Outils pour la linéarisation (sauvegarde sur disque)Outils pour la linéarisation (sauvegarde sur disque)

PHP 5PHP 5 Classes (choix public, protected, private)Classes (choix public, protected, private) Constructeur et destructeurConstructeur et destructeur Membres et méthodes statiquesMembres et méthodes statiques Classes et méthodes abstraitesClasses et méthodes abstraites ……

Page 11: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

111103:24:5203:24:52 Programmation Web 2011-2012Programmation Web 2011-2012

Définition d'une classe en PHP 4Définition d'une classe en PHP 4

<?php<?php

classclass MaClasse MaClasse {{

varvar $$madonneemadonnee ; ; // Attribut// Attribut

// Constructeur// Constructeur

functionfunction MaClasse MaClasse(($$paramparam)) {{

$$thisthis->->madonnee madonnee == $$paramparam ; ;

}}

functionfunction affiche affiche()() { { // Méthode// Méthode

echoecho get_classget_class(($$thisthis))

.."" contient contient "".$.$thisthis->->madonnee ;madonnee ;

}}

}}

?>?>

Attribut publicAttribut public

Déclaration de classeDéclaration de classe

Constructeur publicConstructeur public

Accès à un attributAccès à un attribut

Méthode publiqueMéthode publique

Donne le nom de la Donne le nom de la classe de l'objet classe de l'objet

courantcourant

Référence à Référence à l'objet courantl'objet courant

Page 12: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

121203:24:5203:24:52 Programmation Web 2011-2012Programmation Web 2011-2012

Utilisation d'une classe en PHP 4Utilisation d'une classe en PHP 4

<?php<?php

requirerequire " "maclasse.phpmaclasse.php" ;" ;

// Nouvel objet// Nouvel objet

$$oo == newnew MaClasse MaClasse((1212)) ; ;

// Utilisation d'une méthode// Utilisation d'une méthode

$$oo->->afficheaffiche()() ; ;

$$oo->->madonnee madonnee == " "coucoucoucou" ;" ;

?>?>

Inclusion de la Inclusion de la définition de la classedéfinition de la classe

Création d'un objetCréation d'un objet

Méthode affiche de Méthode affiche de

l'objet l'objet $$oo

Impossible de Impossible de restreindre l'accès restreindre l'accès

aux attributsaux attributs

maclasse contient 12maclasse contient 12

Page 13: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

131303:24:5203:24:52 Programmation Web 2011-2012Programmation Web 2011-2012

<?php<?php

classclass MaClasseHeritee MaClasseHeritee extendsextends MaClasse MaClasse {{

varvar $$autredonneeautredonnee ; ;

functionfunction MaClasseHeritee MaClasseHeritee(($$param1param1, , $$param2param2)) {{

parentparent::::MaClasseMaClasse(($$param1param1)) ; ;

$$thisthis->->autredonnee autredonnee == $$param2param2 ; ;

}}

functionfunction affiche affiche()() {{

MaClasseMaClasse::::afficheaffiche()() ; ;

echoecho " " et et ""..get_classget_class(($$thisthis))

.."" contient contient "".$.$thisthis->->autredonnee ;autredonnee ;

}}

}}

?>?>

Héritage en PHP 4Héritage en PHP 4

Héritage deHéritage deMaClasseMaClasse

Opérateur de Opérateur de résolution de portéerésolution de portée

(Paamayim (Paamayim Nekudotayim) Nekudotayim)

Méthode MaClasse Méthode MaClasse du parentdu parent

Méthode affiche de Méthode affiche de la classe la classe

MaClasseMaClasse

Page 14: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

141403:24:5203:24:52 Programmation Web 2011-2012Programmation Web 2011-2012

Méthodes de classe implicitesMéthodes de classe implicites

<?php<?php

classclass MaClasse MaClasse {{

varvar $$madonneemadonnee ; ; // Attribut// Attribut

// Constructeur// Constructeur

functionfunction MaClasse MaClasse(($$paramparam)) {{

$$thisthis->->madonnee madonnee == $$paramparam ; ;

}}

functionfunction affiche affiche()() { { // Méthode// Méthode

echoecho $$thisthis->->madonnee ;madonnee ;

}}

functionfunction statique statique()() {{ // Méthode// Méthode

echoecho " "Statique !!!Statique !!!" " ;;

}}

}} ?>?>

Méthode publiqueMéthode publique

Ne fait pas référence àNe fait pas référence à$$thisthis

Méthode statiqueMéthode statique(méthode de classe)(méthode de classe)

Page 15: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

151503:24:5203:24:52 Programmation Web 2011-2012Programmation Web 2011-2012

Méthodes de classe implicitesMéthodes de classe implicites

<?php<?php

requirerequire " "maclasse.phpmaclasse.php" ;" ;

// Création d'un objet// Création d'un objet

$$oo == newnew MaClasse MaClasse((1212)) ;;

// Utilisation d'une méthode// Utilisation d'une méthode

$$oo->->afficheaffiche()() ;;

// Utilisation d'une méthode implicitement statique// Utilisation d'une méthode implicitement statique

MaClasseMaClasse::::statiquestatique()() ;;

?>?>

Inclusion de la Inclusion de la définition de la classedéfinition de la classe

Création d'un objetCréation d'un objet

Méthode affiche de Méthode affiche de

l'objet l'objet $$oo

Impossible de Impossible de restreindre l'accès restreindre l'accès

aux attributsaux attributs

1212

Statique !!!Statique !!!

Page 16: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

161603:24:5203:24:52 Programmation Web 2011-2012Programmation Web 2011-2012

Développement objet en PHP 5Développement objet en PHP 5

A partir de maintenant, A partir de maintenant, développement en développement en PHP 5PHP 5

Page 17: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

171703:24:5203:24:52 Programmation Web 2011-2012Programmation Web 2011-2012

Définition d'une classeDéfinition d'une classe

<?php<?php

classclass MaClasse MaClasse {{

privateprivate $$madonneemadonnee ; ;

publicpublic functionfunction __construct __construct(($$paramparam)) {{

$$thisthis->->madonnee madonnee == $$paramparam ; ;

}}

functionfunction __destruct __destruct()() {{

echoecho ""Destruction...Destruction..." ; " ; }}

functionfunction affiche affiche()() {{

echoecho ""madonnee : madonnee : ""

.$.$thisthis->->madonnee ;madonnee ;

}}

} ?>} ?>

Attribut privéAttribut privé

Déclaration de classeDéclaration de classe

Constructeur publicConstructeur public

Référence à l'objet Référence à l'objet courantcourant

Méthode publique Méthode publique par défautpar défaut

Accès à un attributAccès à un attribut

Destructeur publicDestructeur public

Page 18: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

181803:24:5203:24:52 Programmation Web 2011-2012Programmation Web 2011-2012

Utilisation d'une classeUtilisation d'une classe

<?php<?php

requirerequire " "maclasse.phpmaclasse.php" ;" ;

// Nouvel objet// Nouvel objet

$$oo == newnew MaClasse MaClasse((1212)) ; ;

// Utilisation d'une méthode// Utilisation d'une méthode

$$oo->->afficheaffiche()() ; ;

$$oo->->madonnee madonnee == " "coucoucoucou" ;" ;

unsetunset(($$oo)) ; ;

?>?>

Inclusion de la Inclusion de la définition de la classedéfinition de la classe

Création d'un objetCréation d'un objet

Méthode affiche de Méthode affiche de

l'objet l'objet $$oo

L'attribut est privéL'attribut est privé

maclasse contient 12maclasse contient 12

Fatal errorFatal error: Cannot access private : Cannot access private property MaClasse::$madonnee in property MaClasse::$madonnee in dummy.phpdummy.php on line on line 2525

classclass MaClasse MaClasse {{privateprivate $$madonneemadonnee ; ;

......

Destruction de Destruction de

l'objet l'objet $$ooDestruction...Destruction...functionfunction __destruct __destruct()() {{

echo echo ""Destruction...Destruction..." ; " ; }}

Page 19: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

191903:24:5303:24:53 Programmation Web 2011-2012Programmation Web 2011-2012

Valeur par défaut des attributsValeur par défaut des attributs

<?php<?php

classclass MaClasse MaClasse {{

privateprivate $$madonnee madonnee == " "DéfautDéfaut" ;" ;

functionfunction affecte affecte(($$valval)) {{

$$thisthis->->madonnee madonnee = $= $valval ; ; }}

functionfunction affiche affiche()() {{

echoecho ""madonnee : madonnee : "".$.$thisthis->->madonnee ; madonnee ; }}

}}

$$oo == newnew MaClasse MaClasse()() ; ;

$$oo->->afficheaffiche()() ; ;

$$oo->->affecteaffecte((""NouvelleNouvelle"")) ; ;

$$oo->->afficheaffiche()() ; ;

?>?>

Attribut avec valeur Attribut avec valeur par défautpar défaut

Nouvel objetNouvel objet

AffichageAffichage

AffectationAffectation

AffichageAffichage

madonnee : Défautmadonnee : Défaut

madonnee : Nouvellemadonnee : Nouvelle

Page 20: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

202003:24:5303:24:53 Programmation Web 2011-2012Programmation Web 2011-2012

Attributs et méthodes de classeAttributs et méthodes de classe

Mot clé Mot clé staticstatic Attributs et méthodes utilisables Attributs et méthodes utilisables sans instance sans instance

de la classe de la classe (=attributs et méthode de classe)(=attributs et méthode de classe) Attributs Attributs NENE peuvent peuvent PASPAS être accédés depuis être accédés depuis

une instance (une instance ($$objetobjet->->attributattribut)) Attributs partagés par toutes les instances de la Attributs partagés par toutes les instances de la

classeclasse Méthodes peuvent être accédés depuis une Méthodes peuvent être accédés depuis une

instance (instance ($$objetobjet->->methodemethode()())) Dans les méthodes, Dans les méthodes, $$thisthis n'est pas disponible n'est pas disponible

Page 21: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

212103:24:5303:24:53 Programmation Web 2011-2012Programmation Web 2011-2012

Attributs statiquesAttributs statiques

classclass MaClasse MaClasse {{

privateprivate staticstatic $$nn == 00 ; ;

functionfunction __construct __construct()() {{

echoecho ++++MaClasseMaClasse::$::$nn

.."" instance(s) instance(s)" ; " ; }}

functionfunction __destruct __destruct()() {{

echoecho " "destructiondestruction" ; " ; selfself::$::$nn---- ; ; }}

}}

$$ss == newnew MaClasse MaClasse()() ; ;

$$tt == newnew MaClasse MaClasse()() ; ;

unsetunset(($$tt)) ; ;

$$uu == newnew MaClasse MaClasse()() ; ;

$$vv == newnew MaClasse MaClasse()() ; ;

echoecho MaClasse MaClasse::$::$nn ; ;

Attribut privé statique :Attribut privé statique :ne peut être accédé ne peut être accédé

que par des méthodes que par des méthodes de la classede la classe

Accès à l'attribut Accès à l'attribut statiquestatique

1 instance(s)1 instance(s)

2 instance(s)2 instance(s)

destructiondestruction

2 instance(s)2 instance(s)

3 instance(s)3 instance(s)Fatal errorFatal error: Cannot access private property : Cannot access private property MaClasse::$n in MaClasse::$n in dummy.phpdummy.php on line on line 3737

Page 22: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

222203:24:5303:24:53 Programmation Web 2011-2012Programmation Web 2011-2012

Méthodes statiquesMéthodes statiques

classclass MaClasse MaClasse {{

privateprivate staticstatic $$nn == 00 ; ;

functionfunction __construct __construct()() {{

echoecho ++++MaClasseMaClasse::$::$nn.."" instance(s)<br> instance(s)<br>\n\n" ; " ; }}

functionfunction __destruct __destruct()() {{

MaClasseMaClasse::$::$nn---- ; ; }}

staticstatic functionfunction f f(($$ii) {) {

echoecho " "Dans f() : Dans f() : ""..(($$ii*$*$ii)) ; ; }}

}}

$$ss == newnew MaClasse MaClasse()() ; ;

$$ss->->ff((22)) ; ;

MaClasseMaClasse::::ff((33)) ; ;

Méthode publique Méthode publique statiquestatique

Appel à partir d'une instanceAppel à partir d'une instanceToléréToléré

Appel sans instanceAppel sans instance

1 instance(s)1 instance(s)

Dans f() : 4Dans f() : 4

Dans f() : 9Dans f() : 9

Page 23: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

232303:24:5303:24:53 Programmation Web 2011-2012Programmation Web 2011-2012

Constantes de classeConstantes de classe

classclass MaClasse MaClasse {{

constconst constante constante == " "ValeurValeur" ;" ;

publicpublic functionfunction montre montre()() {{

echoecho selfself::::constante ;constante ;

}}

}}

$$cc == newnew MaClasse MaClasse()() ; ;

$$cc->->montremontre()() ; ;

echoecho MaClasse MaClasse::::constante ; constante ;

Constante publique de Constante publique de classeclasse

Accès à la constante Accès à la constante de classe depuis la de classe depuis la

classeclasse

Accès à la constante Accès à la constante de classe à l'extérieur de classe à l'extérieur

de la classede la classe

ValeurValeur

ValeurValeur

Page 24: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

242403:24:5303:24:53 Programmation Web 2011-2012Programmation Web 2011-2012

HéritageHéritage

classclass Simple Simple {{

functionfunction affiche affiche()() {{

echoecho " "Je suisJe suis SimpleSimple" ; " ; }}

}}

classclass Etendue Etendue extendsextends Simple Simple {{

functionfunction affiche affiche()() {{

parentparent::::afficheaffiche()() ; ;

echoecho " " mais aussi Etendue mais aussi Etendue" ;" ;

}}

}}

$$ss == newnew Simple Simple()() ; ;

$$ee == newnew Etendue Etendue()() ; ;

$$ss->->afficheaffiche()() ; ;

$$ee->->afficheaffiche()() ; ;

Classe simpleClasse simple

Une méthode Une méthode publiquepublique

Classe étendue Classe étendue héritant de la classe héritant de la classe

simplesimple

Surcharge de la Surcharge de la méthodeméthode

Appel de la méthode Appel de la méthode du parentdu parent

Je suis Simple mais aussi EtendueJe suis Simple mais aussi Etendue

Je suis SimpleJe suis Simple

Page 25: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

252503:24:5303:24:53 Programmation Web 2011-2012Programmation Web 2011-2012

Assignation d'objetsAssignation d'objets

classclass Point Point {{

privateprivate $$_x_x ; ;

privateprivate $$_y_y ; ;

publicpublic functionfunction __construct __construct(($$xx==00, , $$yy==00)) {{

$$thisthis->->_x _x == $$xx ; ;

$$thisthis->->_y _y == $$yy ; ; }}

publicpublic functionfunction set set(($$xx, , $$yy)) {{

$$thisthis->->_x _x == $$xx ; ;

$$thisthis->->_y _y == $$yy ; ; }}

publicpublic functionfunction toString toString()() {{

returnreturn " "(({{$$thisthis->->_x_x}}, , {{$$thisthis->->_y_y}}))" ; " ; }}

}}

Page 26: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

262603:24:5303:24:53 Programmation Web 2011-2012Programmation Web 2011-2012

Assignation d'objetsAssignation d'objets

$$segmentsegment == arrayarray()() ; ;

$$pointpoint == newnew Point Point()() ; ;

forfor (($$ii==1010; ; $$ii<<2020; ; $$ii++++))

{{

$$pointpoint->->setset(($$ii, , $$ii)) ; ;

$$segmentsegment[][] == $$pointpoint ; ;

}}

foreachforeach (($$segmentsegment asas $$kk =>=> $$pp))

echoecho " "$$kk: : {{$$pp->->toString()toString()}}<br><br>\n\n" ; " ;

0: (19, 19)0: (19, 19)1: (19, 19)1: (19, 19)2: (19, 19)2: (19, 19)3: (19, 19)3: (19, 19)4: (19, 19)4: (19, 19)5: (19, 19)5: (19, 19)6: (19, 19)6: (19, 19)7: (19, 19)7: (19, 19)8: (19, 19)8: (19, 19)9: (19, 19)9: (19, 19)

$$pointpoint

00,,00

$$segmentsegment

00112233445566778899

1010,,10101111,,11111212,,12121313,,13131414,,14141515,,15151616,,16161717,,17171818,,18181919,,1919

Page 27: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

272703:24:5303:24:53 Programmation Web 2011-2012Programmation Web 2011-2012

$$segmentsegment == arrayarray()() ; ;

$$pointpoint == newnew Point Point()() ; ;

forfor (($$ii==1010; ; $$ii<<2020; ; $$ii++++))

{{

$$pointpoint->->setset(($$ii, , $$ii)) ; ;

$$segmentsegment[][] == cloneclone $$pointpoint ; ;

}}

foreachforeach (($$segmentsegment asas $$kk =>=> $$pp))

echoecho " "$$kk: : {{$$pp->->toString()toString()}}<br><br>\n\n" ; " ;

0: (10, 10)0: (10, 10)1: (11, 11)1: (11, 11)2: (12, 12)2: (12, 12)3: (13, 13)3: (13, 13)4: (14, 14)4: (14, 14)5: (15, 15)5: (15, 15)6: (16, 16)6: (16, 16)7: (17, 17)7: (17, 17)8: (18, 18)8: (18, 18)9: (19, 19)9: (19, 19)

Clonage d'objetsClonage d'objets

$$pointpoint

00,,00

$$segmentsegment

00112233445566778899

1010,,1010

1111,,1111

1212,,1212

1313,,1313

1414,,1414

1515,,1515

1616,,1616

1717,,1717

1818,,1818

1919,,1919

1010,,10101111,,11111212,,12121313,,13131414,,14141515,,15151616,,16161717,,17171818,,18181919,,1919

Page 28: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

282803:24:5303:24:53 Programmation Web 2011-2012Programmation Web 2011-2012

Objets comme arguments de fonctionsObjets comme arguments de fonctions

functionfunction origine origine(($$pp) {) {

$$pp->->setset((00, , 00)) ; ; }}

$$pointpoint == newnew Point Point((1010, , 1010)) ; ;

echoecho " "avant: avant: {{$$pointpoint->->toString()toString()}}<br><br>\n\n" ;" ;

origineorigine(($$pointpoint)) ; ;

echoecho " "apres: apres: {{$$pointpoint->->toString()toString()}}<br><br>\n\n" ; " ;

avant: (10, 10)avant: (10, 10)apres: (0, 0)apres: (0, 0)

Passage de l'objet Passage de l'objet PointPoint par référencepar référence

Page 29: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

292903:24:5303:24:53 Programmation Web 2011-2012Programmation Web 2011-2012

Objets dans les chaînes de caractèresObjets dans les chaînes de caractères

Problème :Problème : ambiguïtéambiguïté non évaluablenon évaluable

Chaîne contenant :Chaîne contenant : un attribut d'un objet dans une chaîneun attribut d'un objet dans une chaîne"a : "a : $a->attribut$a->attribut""

le résultat d'une méthode d'un objet dans une chaînele résultat d'une méthode d'un objet dans une chaîne"résultat : "résultat : $a->calcule()$a->calcule()""

une entrée de tableau associatifune entrée de tableau associatif "valeur : "valeur : $tab['cle']$tab['cle']"" une variable suivie de texte (sans espace)une variable suivie de texte (sans espace)"\$a contient "\$a contient $a$aeuros"euros"

Page 30: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

303003:24:5403:24:54 Programmation Web 2011-2012Programmation Web 2011-2012

Objets dans les chaînes de caractèresObjets dans les chaînes de caractères

Solution :Solution : effectuer des concaténations (pénible)effectuer des concaténations (pénible) délimiter par délimiter par {{ }}

Chaîne contenant :Chaîne contenant : un attribut d'un objet dans une chaîneun attribut d'un objet dans une chaîne"a : "a : {{$a->attribut$a->attribut}}""

le résultat d'une méthode d'un objet dans une chaînele résultat d'une méthode d'un objet dans une chaîne"résultat : "résultat : {{$a->calcule()$a->calcule()}}""

une entrée de tableau associatifune entrée de tableau associatif "valeur : "valeur : {{$tab['cle']$tab['cle']}}"" une variable suivie de texte (sans espace)une variable suivie de texte (sans espace)"\$a contient "\$a contient {{$a$a}}euros"euros"

Page 31: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

313103:24:5403:24:54 Programmation Web 2011-2012Programmation Web 2011-2012

Gestion des erreurs : exceptionsGestion des erreurs : exceptions

Gestion des exception identiques à C++/JavaGestion des exception identiques à C++/Java Exception peut être :Exception peut être :

JetéeJetée : : throwthrow EssayéeEssayée : : trytry CapturéeCapturée : : catchcatch

Exception jetée : code après Exception jetée : code après throwthrow non exécuté non exécuté Capture : 1 ou plusieurs blocs (selon type)Capture : 1 ou plusieurs blocs (selon type) Exception non capturée : erreur fataleException non capturée : erreur fatale

Page 32: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

323203:24:5403:24:54 Programmation Web 2011-2012Programmation Web 2011-2012

trytry {{

$$errorerror == ' 'Toujours lancer cette erreurToujours lancer cette erreur';';

throwthrow newnew Exception Exception(($$errorerror));;

/* Le code après une exception n'est/* Le code après une exception n'est

jamais exécuté. */jamais exécuté. */

echoecho ' 'Jamais exécutéJamais exécuté'; '; }}

catchcatch ((Exception Exception $$ee)) {{

echoecho ""Capture Exception: Capture Exception: ""

.$.$ee->->getMessage()getMessage().."" \n\n"; "; }}

// Poursuite de l'exécution// Poursuite de l'exécution

echoecho ' 'Bonjour le mondeBonjour le monde';';

DéroutementDéroutement

Utilisation des exceptionsUtilisation des exceptions

EssayerEssayerLancerLancerCapturerCapturer

Capture Exception: Toujours lancer cette erreurCapture Exception: Toujours lancer cette erreur

Bonjour le mondeBonjour le monde

Page 33: 11:30:19 Programmation Web 2011-2012 1 PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr

333303:24:5403:24:54 Programmation Web 2011-2012Programmation Web 2011-2012

Classe Classe ExceptionException PHP 5 PHP 5

<?php<?php

classclass Exception Exception {{

protectedprotected $$messagemessage == ''; ''; // message de l'exception// message de l'exception

protectedprotected $$codecode == 00; ; // code de l'exception// code de l'exception

protectedprotected $$filefile; ; // fichier source de l'exception// fichier source de l'exception

protectedprotected $$lineline; ; // ligne de la source de l'exception// ligne de la source de l'exception

functionfunction __construct __construct((stringstring $$messagemessage==NULLNULL, , intint code code==00));;

finalfinal functionfunction getMessage getMessage()(); ; // message de l'exception// message de l'exception

finalfinal functionfunction getCode getCode()(); ; // code de l'exception// code de l'exception

finalfinal functionfunction getFile getFile()(); ; // nom du fichier source// nom du fichier source

finalfinal functionfunction getLine getLine()(); ; // ligne du fichier source// ligne du fichier source

finalfinal functionfunction getTrace getTrace()(); ; // un tableau de backtrace()// un tableau de backtrace()

finalfinal functionfunction getTraceAsString getTraceAsString()(); ; // chaîne de trace// chaîne de trace

functionfunction _toString _toString()(); ; // chaîne pour l'affichage// chaîne pour l'affichage

} ?>} ?>