• Aucun résultat trouvé

Validation en entrée et gestion d’une exception

2.3.1 Qu’est-ce que le filtrage ?

Les setters de la classe vont jouer un rôle important de filtrage des données. Le filtrage consiste à réaliser des tests sur les données entrées (généralement des données issues d’un utilisateur final), et à générer des erreurs en cas de données incorrectes, ou encore en remplaçant automa- tiquement des données incorrecte par des données, sinon correctes, au moins inoffensives.

En particulier, lorsque les données viendront de la saisie d’un formulaire, ces données de- vront être systématiquement filtrées car l’utilisateur, qui n’est pas toujours bienveillant, et peut mettre n’importe quoi dans les champs d’un formulaire. Le filtrage jouera donc un rôle très important pour la sécurité. Par exemple, on prendra soin de limiter la longueur des attributs de type String à la fois au niveau du filtrage, puis au niveau de la base de données (voir chapitres ultérieurs). On pourra aussi utiliser des expressions régulières lors du filtrage grâce aux fonc- tions preg_match_all ou preg_match (voir man regex(7) pour la formation des expressions régulières). Le gros avantage du PHP par rapport à d’autres langages comme javascript, est que PHP s’exécute côté serveur donc un pirate n’aura pas la possibilité d’analyser précisément ce que fait le filtrage.

Si une valeur invalide est détectée au niveau du filtrage, on générera une exception avec un message d’erreur. Cette exception pourra être gérée à un autre niveau dans l’application, ici au niveau du script de test qui affiche quelques employés. Certaines parties ultérieures de ce cours sont dédiées au filtrage précis des données et à garantir la sécurité du code grâce au

filtrage. Dans cette partie, nous réalisons un filtrage sommaire, pour illustrer le mecanisme de gestion des erreurs par exceptions.

2.3.2 Classe Personne avec filtrage dans les setters

Nous voyons ici une classe Personne, suivant un peu le meme schéma de conception que la classe Adresse de la partie précédente. Cependant, au niiveau des setters, nous implémenterons un filtrage (minimal et peu réaliste pour le moment), rejetant une exception en cas de données incorrectes.

Code Source 2.8 : /php2/classes/Personne.php

1 < ?php

2 namespace CoursPHP\ M e t i e r ;

3 r e q u i r e _ o n c e ( dirname (__FILE__) . ’ / P e r s o n n e P r o p e r t i e s T r a i t . php ’ ) ; 4 /* * @ b r i e f Repr é s e n t e une pe rs o nn e ( c l i e n t , employ é , c o n t a c t . . . )

5 E l l e c o n t i e n t l ’ i d e n t i t é (nom pr énom) , l ’ a d r e s s e , l e nomé ro de t é l é phone 6 e t l e s a l a i r e mensuel de l ’ employ é . */

7 c l a s s Personne {

8 /* * I d e n t i f i a n t u n i q u e de l a pe r so nne */ 9 protected $ i d P e r s o n n e ;

10 /* * nom de l ’ employ é : o b l i g a t o i r e . Le nom de l ’ employ é ne p e u t ê t r e v i d e . */ 11 protected $nom ;

12 /* * pr énom de l ’ employ é */ 13 protected $prenom ;

14 /* * a d r e s s e de l ’ employ é ( i n s t a n c e d ’ Adresse ) */ 15 protected $ a d r e s s e ;

16 /* * Tableau d e s numé r o s de t é l é phone */ 17 protected $ t e l e p h o n e s ; 18 19 // I n c l u s i o n du t r a i t a v e c l e s a c c e s s e u r s / s e t t e r s d e s p r o p r i é t é s 20 use P e r s o n n e P r o p e r t i e s ; 21 22 /* * @ b r i e f C o n s t r u c t e u r : i n i t i a l i s e l e s a t t r i b u t s à p a r t i r d e s p a r a m è t r e s . 23 * Les p a r a m è t r e s c o r r e s p o n d e n t aux v a l e u r s à m e t t r e dans l e s a t t r i b u t s . 24 * Tout o b j e t d o i t ê t r e i n i t i a l i s é a v e c l e c o n s t r u c t e u r ( a p p e l à new) . 25 * Des e x c e p t i o n s s o n t r e j e t é e s en c a s de p a r a m è t r e s i n v a l i d e . */

26 public function __construct ( $ idPe rs onn e , $nom , $prenom , $ a d r e s s e , $ t e l e p h o n e s )

{ 27 $ t h i s−>setIdPersonne ( $idPersonne ) ; 28 $ t h i s−>setNom ($nom) ; 29 $ t h i s−>setPrenom ( $prenom ) ; 30 $ t h i s−>setAdresse ( $ a d r e s s e ) ; 31 $ t h i s−>setTelephones ( $telephones ) ; 32 } 33 } 34 ?>

Code Source 2.9 : /php2/classes/PersonnePropertiesTrait.php

1 < ?php

2 namespace CoursPHP\ M e t i e r ;

3

4 t r a i t P e r s o n n e P r o p e r t i e s {

5 /* * @ b r i e f a c c e s s e u r : permet d ’ o b t e n i r l e nom de l ’ employ é */ 6 public function g e t i d P e r s o n n e ( ) {

7 return $ t h i s−>idPersonne ;

8 }

9

10 /* * @ b r i e f a c c e s s e u r : permet d ’ o b t e n i r l e nom de l ’ employ é */ 11 public function getNom ( ) {

12 return $ t h i s−>nom ;

13 }

14

15 /* * @ b r i e f a c c e s s e u r : permet d ’ o b t e n i r l e pr énom de l ’ employ é */ 16 public function getPrenom ( ) {

17 return $ t h i s−>prenom ; 18 } 19 20 /* * @ b r i e f a c c e s s e u r : permet d ’ o b t e n i r l ’ a d r e s s e de l ’ employ é */ 21 public function g e t A d r e s s e ( ) { 22 return $ t h i s−>a d r e s s e ; 23 } 24 25 /* * @ b r i e f a c c e s s e u r : permet d ’ o b t e n i r l e t a b l e a u d e s t é l é phones */ 26 public function g e t T e l e p h o n e s ( ) { 27 return $ t h i s−>t e l e p h o n e s ; 28 } 29

30 /* * @ b r i e f a c c e s s e u r : permet d ’ o b t e n i r un numé ro de t é l é phone de l ’ employ é 31 * @param l i b e l l e Le l i b e l l é du numé ro s o u h a i t é */

32 public function g e t T e l e p h o n e ( $ l i b e l l e ) {

33 i f (empty( $ t h i s−>t e l e p h o n e s [ $ l i b e l l e ] ) ) {

34 throw new \ E x c e p t i o n ( ’Dé s o l é , Le t é l é phone ” ’ . $ l i b e l l e . ’ ” n \ ’ e x i s t e pas .

Have a t r y i n t h e phonebook . . . ’ ) ; 35 } 36 return $ t h i s−>t e l e p h o n e s [ $ l i b e l l e ] ; 37 } 38 39 /* * s e t t e r : permet d ’ i n i t i a l i s e r ou de m o d i f i e r l ’ i d e n t i f i a n t de l a p e rs o n n e 40 * @param $ i d P e r s o n n e l ’ i d e n t i f i a n t de l a p e r s o n n e . Doit ê t r e non v i d e */ 41 public function s e t I d P e r s o n n e ( $ i d P e r s o n n e ) { 42 i f (empty( $ i d P e r s o n n e ) | | s t r l e n ( $ i d P e r s o n n e ) != 1 0 ) { 43 throw new \ E x c e p t i o n ( ’Dé s o l é , t o u t e pe r s o n n e d o i t a v o i r un i d e n t i f i a n t de 10 c a r a c t è r e s ! ’ ) ; 44 } e l s e { 45 $ t h i s−>idPersonne= $idPersonne ; 46 } 47 } 48 49 /* * s e t t e r : permet d ’ i n i t i a l i s e r ou de m o d i f i e r l e nom de l a pe r s o n ne

50 * @param $Nom l e nom de l a p er so n ne . Doit comporter au moins 1 c a r a c t è r e */ 51 public function setNom ( $nom ) {

52 i f (empty( $nom ) | | s t r l e n ( $nom ) > 1 0 0 ) {

53 throw new \ E x c e p t i o n ( ’Dé s o l é , t o u t e pe r s o n n e d o i t a v o i r un nom e t l e nom a

au p l u s 100 c a r a c t è r e s ! ’ ) ; 54 } e l s e { 55 $ t h i s−>nom = $nom ; 56 } 57 } 58 59 /* * s e t t e r : permet d ’ i n i t i a l i s e r ou de m o d i f i e r l e nom de l a pe r s o n ne */

60 public function setPrenom ( $prenom ) {

61 i f (empty( $prenom ) | | s t r l e n ( $prenom ) > 5 0 ) {

62 throw new \ E x c e p t i o n ( ’Dé s o l é , t o u t e pe r s o n n e d o i t a v o i r un prenom e t l e

prenom a au p l u s 50 c a r a c t è r e s ! ’ ) ; 63 } e l s e { 64 $ t h i s−>prenom = $prenom ; 65 } 66 } 67 68 /* * s e t t e r : permet d ’ i n i t i a l i s e r ou de m o d i f i e r l ’ a d r e s s e de l a p e r s o nn e */ 69 public function s e t A d r e s s e ( $ a d r e s s e ) {

70 i f ( $ a d r e s s e == n u l l | | get_ c l a s s ( $ a d r e s s e ) != ’ CoursPHP\ M e t i e r \ Adresse ’ ) {

71 throw new \ E x c e p t i o n ( ’ Erreur : Adresse I n v a l i d e ’ ) ;

72 } e l s e { 73 $ t h i s−>a d r e s s e = $ a d r e s s e ; 74 } 75 } 76 77 /* * s e t t e r : permet d ’ i n i t i a l i s e r ou de m o d i f i e r l ’ a d r e s s e de l a p e r s o nn e */ 78 public function s e t T e l e p h o n e s ( $ t e l e p h o n e s ) { 79 i f ( ! is_array ( $ t e l e p h o n e s ) ) {

80 throw new \ E x c e p t i o n ( ’ Erreur : Té l é phones I n v a l i d e ’ ) ;

81 } e l s e {

82 $ t h i s−>te l e p ho n e s = $telephones ;

83 }

84 }

85

86 /* * s e t t e r : permet d ’ a j o u t e r un numé ro de t é l é phone de l a p e r s on n e */ 87 public function addTelephone ( $ l i b e l l e , $numero ) {

88 i f ( !empty( $numero ) && s t r l e n ( $numero ) <= 1 5 ) {

89 i f ( ! is_array ( $ t h i s−>t e l e ph o n e s ) ) {

90 $ t h i s−>t e l e p h o n es = array ( ) ;

91 }

92 $ t h i s−>te l e p ho n e s [ $ l i b e l l e ] = new Telephone ( $ l i b e l l e , $numero ) ;

93 } e l s e {

94 throw new \ E x c e p t i o n ( ’ Erreur : Té l é phone I n v a l i d e ’ ) ;

95 }

96 }

97

98 /* * s e t t e r : permet d ’ a j o u t e r un numé ro de t é l é phone de l a p e r s on n e */ 99 public function removeTelephone ( $ l i b e l l e ) {

100 i f ( !empty( $ t h i s−>telephone [ $ l i b e l l e ] ) ) { 101 unset ( $ t h i s−>telephone [ $ l i b e l l e ] ) ; 102 } 103 } 104 } 105 ?>

Code Source 2.10 : /php2/classes/PersonneView.php

1 < ?php

2 namespace CoursPHP\Vue ;

3 /* * U t i l i t a i r e de g éné r a t i o n de code HTML pour l a mise en forme 4 * d e s a t t r i b u t s d ’ une Personne */

5 c l a s s PersonneView {

7 * Les a t t r i b u t s d o i v e n t ê t r e non n u l l .

8 * ( mais normalement ç a ne r i s q u e pas d ’ a r r i v e r c a r l e s a t t r i b u t s s o n t p r i v é s 9 * donc l ’ u t i l i s a t e u r de l a c l a s se n ’ a pas pu l e s m e t t r e à n u l l .

10 * Les s e t t e r s e t l e c o n s t r u c t e u r e s t a i n s i con ç u que l e s a t t r i b u t s 11 * ne p e u v e n t pas ê t r e n u l l . ) */

12 public s t a t i c function getHtmlDevelopped ( $ p e r s o n n e ) {

13 $htmlCode = ” ” ;

14 $htmlCode .= ”nom : ” . $personne−>getNom ( ) . ”<br/>\n” ;

15 i f ( s t r l e n ( $personne−>getPrenom ( ) )>=1)

16 $htmlCode .= ”Pr énom : ” . $personne−>getPrenom ( ) . ”<br/>\n” ;

17 $htmlCode .= AdresseView : :getHtmlDevelopped ( $personne−>getAdresse ( ) ) ;

18 $count = 0 ;

19 foreach ( $personne−>getTelephones ( ) as $telephone ) {

20 i f ( $count != 0 ) { 21 $htmlCode .= ”<b r/>” ; 22 } 23 $count++ ; 24 $htmlCode .= $ t e l e p h o n e−>toHTML( ) ; 25 } 26 $htmlCode .= ”<b r />\n” ; 27 return $htmlCode ; 28 } 29 30 /* * @ b r i e f Mé t h o d e de g éné r a t i o n d ’ une l i g n e de tableHTML . 31 * Permet d ’ a f f i c h e r d e s Personnes dans une t a b l e HTML. */ 32 public s t a t i c function getHtmlTableRow ( $ p e r s o n n e ) {

33 $htmlCode = ”<t r >” ;

34 $htmlCode .= ”<td>” . $personne−>getNom ( ) . ”</td>” ;

35 $htmlCode .= ”<td>” . $personne−>getPrenom ( ) . ”</td>” ;

36 $htmlCode .= ”<td>” . AdresseView : :getHtmlCompact ( $personne−>getAdresse ( ) ) . ”</

td>” ;

37 $htmlCode .= ”<td>” ;

38 $count = 0 ;

39 foreach ( $personne−>getTelephones ( ) as $telephone ) {

40 i f ( $count != 0 ) { 41 $htmlCode .= ”<b r/>” ; 42 } 43 $count++ ; 44 $htmlCode .= $ t e l e p h o n e−>toHTML( ) ; 45 } 46 $htmlCode .= ”</td>” ; 47 $htmlCode .= ”</t r >” ; 48 49 return $htmlCode ; 50 } 51

52 /* * Permet d ’ o b t e n i r une l i g n e de t a b l e HTML a v e c l e s en−t ê t e s de colonnes 53 * pour a f f i c h a g e d ’ une t a b l e de Personnes . */

54 public s t a t i c function getHtmlTableHeads ( ) {

55 $htmlCode = ”<t r >” ; 56 $htmlCode .= ”<th>Nom</th>” ; 57 $htmlCode .= ”<th>Pr énom</th>” ; 58 $htmlCode .= ”<th>Adresse </th>” ; 59 $htmlCode .= ”<th>Té l é phone ( s )</th>” ; 60 $htmlCode .= ”</t r >” ; 61 return $htmlCode ;

62 }

63 } // end o f c l a s s PersonneView 64 ?>

2.3.3 Test de construction de Personnes et récupération des excep-

tions

Voyons tout d’abord la construction normale et l’affichage d’une personne.

Figure 2.2 : Illustration du code source 2.11

Code Source 2.11 : /php2/ex10-testPersonnes.php (cf. Fig 2.2)

1 < ?php

2 r e q u i r e _ o n c e ( dirname (__FILE__) . ’ / c l a s s e s / Telephone . php ’ ) ; 3 r e q u i r e _ o n c e ( dirname (__FILE__) . ’ / c l a s s e s / Adresse . php ’ ) ; 4 r e q u i r e _ o n c e ( dirname (__FILE__) . ’ / c l a s s e s / Personne . php ’ ) ; 5

6 use CoursPHP\ M e t i e r \ A d r e s s e ;

7 use CoursPHP\ M e t i e r \ Telephone ;

8 use CoursPHP\ M e t i e r \ Personne ;

9

10 t r y {

11 $ a d r e s s e = new A d r e s s e ( ”0 a f 4 6 d 3 b d 9 ” , ’ 10 ’ , ’ a l l é e du n e t ’ ,

12 ’ Q u a r t i e r de l \ ’ a v e n i r ’ , ’ 63000 ’ , ’ Clermont−Ferrand ’ , ’ France ’ ) ;

13 $ t e l e p h o n e s = array (new Telephone ( ” D o m i c i l e ” , ” 04 73 00 00 00 ” ) , 14 new Telephone ( ” M o b i l e ” , ” 06 78 90 12 34 ” ) ) ;

15 $ p e r s o n n e = new Personne ( ” 043 f 4 6 d 3 a 3 ” , ”Obama” , ” Barack ” , $ a d r e s s e ,

16 $ t e l e p h o n e s ) ;

17

18 // La p e r s o n n e a b i e n é t é c o n s t r u i t e , on a f f i c h e 19 require ( ” ex10−vueNormale . php” ) ;

20 } c a t c h ( E x c e p t i o n $e ) {

21 // Une e r r e u r s ’ e s t p r o d u i t e , on l a g è r e 22 require ( ” ex10−vueErreur . php” ) ;

23 }

24 ?>

1 < ?php

2 r e q u i r e _ o n c e ( dirname (__FILE__) . ’ / c l a s s e s / VueHtmlUtils . php ’ ) ; 3 r e q u i r e _ o n c e ( dirname (__FILE__) . ’ / c l a s s e s / AdresseView . php ’ ) ; 4 r e q u i r e _ o n c e ( dirname (__FILE__) . ’ / c l a s s e s / PersonneView . php ’ ) ; 5

6 use \CoursPHP\Vue\ PersonneView ;

7

8 echo \CoursPHP\Vue\ VueHtmlUtils : :enTeteHTML5 (

9 ’ C o n s t r u c t i o n e t a f f i c h a g e d \ ’ une Personne ’ , ’UTF−8 ’ , ’ myStyle . c s s ’ ) ;

10 echo ”<p>” ;

11 echo PersonneView : :getHtmlDevelopped ( $ p e r s o n n e ) ;

12 echo ”</p>” ;

13

14 echo \CoursPHP\Vue\ VueHtmlUtils : :finFichierHTML5 ( ) ;

15 ?>

Code Source 2.13 : /php2/ex10-vueErreur.php

1 < ?php

2 r e q u i r e _ o n c e ( ’ c l a s s e s / VueHtmlUtils . php ’ ) ; 3

4 echo \CoursPHP\Vue\ VueHtmlUtils : :enTeteHTML5 ( ’ G e s t i o n d \ ’ une e x c e p t i o n ’ ,

5 ’UTF−8 ’ , ’ myStyle . c ss ’ ) ;

6

7 echo ”<h1>Une Erreur c ’ e s t p r o d u i t e </h1>” ;

8 echo ”<p>E x c e p t i o n r e ç ue : ” . $e−>getMessage ( ) . ”</p>” ;

9

10 echo \CoursPHP\Vue\ VueHtmlUtils : :finFichierHTML5 ( ) ;

11 ?>

Voyons maintenant le test d’une vue affichant plusiers personnes dans une table HTML.

Figure 2.3 : Illustration du code source 2.14

Code Source 2.14 : /php2/ex11-testTableViewPersonnes.php (cf. Fig 2.3)

1 < ?php

3 r e q u i r e _ o n c e ( dirname (__FILE__) . ’ / c l a s s e s / Adresse . php ’ ) ; 4 r e q u i r e _ o n c e ( dirname (__FILE__) . ’ / c l a s s e s / Personne . php ’ ) ; 5

6 use CoursPHP\ M e t i e r \ A d r e s s e ;

7 use CoursPHP\ M e t i e r \ Telephone ;

8 use CoursPHP\ M e t i e r \ Personne ;

9

10 echo ”<p>” ;

11 t r y {

12 $ a d r e s s e 1 = new A d r e s s e ( ”0 a f 4 6 d 3 b d 9 ” , ’ 10 ’ , ’ a l l é e du n e t ’ , ’ Q u a r t i e r de l \ ’

a v e n i r ’ ,

13 ’ 63000 ’ , ’ Clermont−Ferrand ’ , ’ France ’ ) ;

14 $ t e l e p h o n e s 1 = array (new Telephone ( ” D o m i c i l e ” , ” 04 73 00 00 00 ” ) ) ; 15 $ p e r s o n n e 1 = new Personne ( ” 043 f 4 6 d 3 a 3 ” , ”Obama” , ” Barack ” , $ a d r e s s e 1 ,

$ t e l e p h o n e s 1 ) ;

16 $ a d r e s s e 2 = new A d r e s s e ( ”0 a f 4 6 d 3 b e 0 ” , ’ 12 ’ , ’ Georgy ’ , n u l l , ’ 63000 ’ , ’ Trench

Town ’ , ’ Jamaica ’ ) ;

17 $ t e l e p h o n e s 2 = array (new Telephone ( ” Emergency ” , ” 911 ” ) ) ;

18 $ p e r s o n n e 2 = new Personne ( ” a f 3 f 4 6 d 2 7 f ” , ” Modèle ” , ” Jean ” , $ a d r e s s e 2 , $ t e l e p h o n e s 2 ) ;

19 $ a d r e s s e 3 = new A d r e s s e ( ”0 a f 4 6 d 3 b e 1 ” , ’ 10 ’ , ’ Rock \ ’ n R o l l S t r e e t ’ , ’ Bronx ’ ,

’ 63000 ’ , ’ Rackamadour ’ , ’ France ’ ) ;

20 $ p e r s o n n e 3 = new Personne ( ”3 a e f 4 6 d 7 f e ” , ”Géné r a t i o n ” , ” iGrec ” , $ a d r e s s e 3 , 21 array (new Telephone ( ” T r a v a i l ” , ” 01 23 45 67 89 ” ) ) ) ;

22 $ p e r s o n n e s = array ( 1 => $personne1 , 2 => $personne2 , 3 => $ p e r s o n n e 3 ) ; 23

24 require ( ” ex11−vueNormale . php” ) ;

25 } c a t c h ( E x c e p t i o n $e ) {

26 require ( ” ex10−vueErreur . php” ) ;

27 }

28 ?>

Code Source 2.15 : /php2/ex11-vueNormale.php

1 < ?php

2 r e q u i r e _ o n c e ( dirname (__FILE__) . ’ / c l a s s e s / VueHtmlUtils . php ’ ) ; 3 r e q u i r e _ o n c e ( dirname (__FILE__) . ’ / c l a s s e s / AdresseView . php ’ ) ; 4 r e q u i r e _ o n c e ( dirname (__FILE__) . ’ / c l a s s e s / PersonneView . php ’ ) ; 5

6 use CoursPHP\Vue\ PersonneView ;

7

8 echo CoursPHP\Vue\ VueHtmlUtils : :enTeteHTML5 ( ’Géné r a t i o n de T ab le ’ ,

9 ’UTF−8 ’ , ’ myStyle . c ss ’ ) ;

10 echo ”<p><s t r o n g >A f f i c h a g e d ’ une t a b l e de Personnes&nbsp ; :</ s t r o n g ></p>” ;

11 echo ”<t a b l e >” ;

12 echo ”<thead >” . PersonneView : :getHtmlTableHeads ( ) . ”</thead >” ;

13 echo ”<t b od y >” ;

14 foreach ( $ p e r s o n n e s a s $ p e r s o n n e ) {

15 echo PersonneView : :getHtmlTableRow ( $ p e r s o n n e ) ;

16 }

17 echo ”</tbody >” ;

18 echo ”</ t a b l e >” ;

19 echo CoursPHP\Vue\ VueHtmlUtils : :finFichierHTML5 ( ) ;

20 ?>

niveau du setter, alors que notre récupération de l’exception nous permet d’afficher un message d’erreur intelligible, évitant le crash complet du site.

Dans l’exemple suivant, nous créons deux personnes en récupérant, pour chacune, une exception. Nous accumulons les éventuels messages exceptions dans un tableau associatifs. Dans la vue qui suit, nous testons la présence d’erreurs dans ce tableau associatif avant d’afficher soit la personne, soit le message d’erreur concernant cette instance (le cas échéant).

Figure 2.4 : Illustration du code source 2.16

Code Source 2.16 : /php2/ex12-testExceptionsPersonnes.php (cf. Fig 2.4)

1 < ?php

2 r e q u i r e _ o n c e ( dirname (__FILE__) . ’ / c l a s s e s / Telephone . php ’ ) ; 3 r e q u i r e _ o n c e ( dirname (__FILE__) . ’ / c l a s s e s / Adresse . php ’ ) ; 4 r e q u i r e _ o n c e ( dirname (__FILE__) . ’ / c l a s s e s / Personne . php ’ ) ; 5

6 use CoursPHP\ M e t i e r \ A d r e s s e ;

7 use CoursPHP\ M e t i e r \ Telephone ;

8 use CoursPHP\ M e t i e r \ Personne ;

9

10 $ d a t a E r r o r = array ( ) ; 11

12 t r y {

13 $ a d r e s s e 1 = new A d r e s s e ( ”0 a f 4 6 d 3 b d 9 ” , ’ 10 ’ , ’ Downing S t r e e t ’ , n u l l ,

14 n u l l , ’ London ’ , ’ United Kingdom ’ ) ;

15 $ p e r s o n n e 1 = new Personne ( ” e 2 f 4 6 d 3 b a 6 ” , ” Thatcher ” , ” Marggy ” , $ a d r e s s e 1 , 16 ” 01 23 45 67 89 ” ) ; // Le t é l é phone d e v r a i t ê t r e une i n s t a n c e 17 } c a t c h ( E x c e p t i o n $e ) {

18 $ d a t a E r r o r [ ” perso nne1 ” ] = $e−>getMessage ( ) ;

19 }

20

21 t r y {

22 $ a d r e s s e 2 = new A d r e s s e ( ” b 3 f 4 6 d 3 a 5 d ” , ’ 10 ’ , ’ a l l é e du n e t ’ ,

23 ’ Q u a r t i e r de l \ ’ a v e n i r ’ , ’ 63000 ’ , ’ Clermont−Ferrand ’ , ’ Technique ’ ) ;

24 $ p e r s o n n e 2 = new Personne ( ” a4b46d3a5c ” , ” U r l u b e r l u ” , n u l l , $ a d r e s s e 2 , n u l l ) ; // Pr énom ? ?

25 } c a t c h ( E x c e p t i o n $e ) {

26 $ d a t a E r r o r [ ” perso nne2 ” ] = $e−>getMessage ( ) ;

27 }

28

29 // Appel de l a vue :

30 require ( ’ ex12−vueExceptionsPersonnes . php ’ ) ;

31 ?>

1 < ?php

2 r e q u i r e _ o n c e ( dirname (__FILE__) . ’ / c l a s s e s / VueHtmlUtils . php ’ ) ; 3 r e q u i r e _ o n c e ( dirname (__FILE__) . ’ / c l a s s e s / AdresseView . php ’ ) ; 4 r e q u i r e _ o n c e ( dirname (__FILE__) . ’ / c l a s s e s / PersonneView . php ’ ) ; 5

6 use CoursPHP\Vue\ AdresseView ;

7 use CoursPHP\Vue\ PersonneView ;

8

9 echo CoursPHP\Vue\ VueHtmlUtils : :enTeteHTML5 ( ’ G e s t i o n d \ ’ une e x c e p t i o n ’ ,

10 ’UTF−8 ’ , ’ myStyle . c ss ’ ) ;

11

12 echo ”<p>” ;

13 echo ”<s t r o n g >Test a v e c r é cup é r a t i o n s d ’ e x c e p t i o n s&nbsp ; :</ s t r o n g ><b r/>” ;

14 i f (empty( $ d a t a E r r o r [ ” pers onne1 ” ] ) ) {

15 echo PersonneView : :getHtmlDevelopped ( $ p e r s o n n e 1 ) ;

16 } e l s e {

17 echo $ d a t a E r r o r [ ” personne1 ” ] ;

18 }

19 echo ”</p>” ;

20 echo ”<p>” ;

21 i f (empty( $ d a t a E r r o r [ ” pers onne2 ” ] ) ) {

22 echo PersonneView : :getHtmlDevelopped ( $ p e r s o n n e 2 ) ;

23 } e l s e {

24 echo $ d a t a E r r o r [ ” personne2 ” ] ;

25 }

26 echo ”</p>” ;

27

28 echo CoursPHP\Vue\ VueHtmlUtils : :finFichierHTML5 ( ) ;

29 ?>