Master 1 Gnie Logiciel M 521 Web avanc
Master 1 Génie Logiciel M 521 Web avancé
PHP Objet
Développement objet �Un objet est une structure de données comprenant des fonctionnalités de traitement des données �La construction d’un objet à partir de la classe génératrice s’appelle instanciation �Les objets, entités en mémoire, sont des instances de la classe �Les données internes et les fonctionnalités possèdent un niveau de visibilité et peuvent éventuellement être masquées : �Public �Privé �Protégé 3
Encapsulation �Les données internes des objets sont appelées attributs (ou propriétés voire champs) �Les fonctionnalités des objets sont appelées méthodes �Méthodes habituelles : �Constructeur / destructeur �Accesseurs / modificateurs (getters / setters) �Référence à l’objet courant dans la description de la classe : $this 4
Visibilité �Publique : Toutes les autres classes ont accès. �Protégé : Seules la classe elle-même et les classes filles (héritage) ont accès �Privé : Seule la classe elle-même a accès. 5
Héritage ou extension �Création de nouvelles classes à partir du modèle d’une classe existante �La nouvelle classe possède tous les attributs et méthodes de la classe mère �La nouvelle classe peut proposer de nouveaux attributs et de nouvelles méthodes ou spécialiser des méthodes de la classe mère 6
Définition d'une classe Déclaration de classe <? php class Ma. Classe { private $madonnee ; Attribut privé Constructeur public function __construct($param) { $this->madonnee = $param ; Référence à l'objet } courant function __destruct() { echo "Destruction. . . " ; } Destructeur public function affiche() { echo "madonnee : " Méthode publique. $this->madonnee ; par défaut } } Accès à un attribut 7
Utilisation d'une classe Inclusion de la définition de la classe <? php require "maclasse. php" ; Création d'un objet // Nouvel objet $o = new Ma. Classe(12) ; maclasse contient 12 méthode // Utilisation d'une $o->affiche() ; class Ma. Classe { Fatal error : Cannot access private $madonnee ; property Ma. Classe: : $madonnee in $o->madonnee = "coucou" ; . . . dummy. php on line 25 function __destruct() { echo "Destruction. . . " ; } Destruction. . . unset($o) ; Méthode affiche de l'objet $o L'attribut est privé Destruction de l'objet $o 8
Valeur par défaut des attributs Attribut avec valeur par défaut <? php class Ma. Classe { private $madonnee = "Défaut" ; function affecte($val) { $this->madonnee = $val ; } function affiche() { echo "madonnee : ". $this->madonnee. Nouvel ; } objet } Affichage $o = new Ma. Classe() ; $o->affiche() ; madonnee : Défaut Affectation $o->affecte("Nouvelle") ; $o->affiche() ; madonnee : Nouvelle Affichage 9
Constantes de class Ma. Classe { constante = "Valeur" ; public function montre() { echo self: : constante ; } } $c = new Ma. Classe() ; $c->montre() ; Valeur echo Ma. Classe: : constante ; Valeur Constante publique de classe Accès à la constante de classe depuis la classe Accès à la constante de classe à l'extérieur de la classe 10
Héritage class Simple { function affiche() { echo "Je suis Simple" ; } } class Etendue extends Simple { function affiche() { parent: : affiche() ; echo " mais aussi Etendue" ; } } $s = new Simple() ; $e = new Etendue() ; Je suis Simple $ s-> affiche () ; $e-> affiche () ; mais aussi Etendue Je suis Simple Classe simple Une méthode publique Classe étendue héritant de la classe simple Surcharge de la méthode Appel de la méthode du parent 11
Assignation d'objets class Point { private $_x ; private $_y ; public function __construct($x=0, $y=0) { $this->_x = $x ; $this->_y = $y ; } public function set($x, $y) { $this->_x = $x ; $this->_y = $y ; } public function to. String() { return "({$this->_x}, {$this->_y})" ; } } 12
Assignation d'objets $segment = array() ; $point = new Point() ; for ($i=10; $i<20; $i++) { $point->set($i, $i) ; $segment[] = $point ; } foreach ($segment as $k => $p) echo "$k: {$p->to. String()} n" ; $point $segment 0: (19, 19) 0 1: (19, 19) 1 19) 2: (19, 2 19) 3: (19, 4: (19, 3 19) 5: (19, 4 19) 6: (19, 5 19) 7: (19, 19) 6 8: (19, 19) 7 19) 9: (19, 8 9 19 10 11 12 13 14 15 16 17 18 0, 19 0 10 11 12 13 14 15 16 17 18 13
19 10 11 12 13 14 15 16 17 18 0, 19 0 10 11 12 13 14 15 16 17 18 Clonage d'objets $segment = array() ; $point = new Point() ; for ($i=10; $i<20; $i++) { $point->set($i, $i) ; $segment[] = clone $point ; } foreach ($segment as $k => $p) echo "$k: {$p->to. String()} n" ; $point $segment 0: (10, 10) 0 1: (11, 11) 1 12) 2: (12, 2 13) 3: (13, 4: (14, 3 14) 5: (15, 4 15) 6: (16, 5 16) 7: (17, 17) 6 8: (18, 18) 7 19) 9: (19, 8 9 10, 10 11, 11 12, 12 13, 13 14, 14 15, 15 16, 16 17, 17 18, 18 19, 19 14
Objets dans les chaînes de caractères �Problème : �ambiguïté �non évaluable �Chaîne contenant : �un attribut d'un objet dans une chaîne "a : $a->attribut" �le résultat d'une méthode d'un objet dans une chaîne "résultat : $a->calcule()" �une entrée de tableau associatif �"valeur : $tab['cle']" �une variable suivie de texte (sans espace) "$a contient $aeuros" 15
Objets dans les chaînes de caractères �Solution : �effectuer des concaténations (pénible) �délimiter par { } �Chaîne contenant : �un attribut d'un objet dans une chaîne "a : {$a->attribut}" �le résultat d'une méthode d'un objet dans une chaîne "résultat : {$a->calcule()}" �une entrée de tableau associatif �"valeur : {$tab['cle']}" �une variable suivie de texte (sans espace) "$a contient {$a}euros" 16
Gestion des erreurs : exceptions �Gestion des exception identiques à C++/Java �Exception peut être : �Jetée : throw �Essayée : try �Capturée : catch �Exception jetée : code après throw non exécuté �Capture : 1 ou plusieurs blocs (selon type) �Exception non capturée : erreur fatale 17
Utilisation des exceptions try { $error = 'Toujours lancer cette erreur'; throw new Exception($error); /* Le code après une exception n'est Déroutement jamais exécuté. */ Capturer Essayer Lancer echo 'Jamais exécuté'; } catch (Exception $e) { Capture lancer echo Exception: "Capture Toujours Exception: " cette erreur. $e->get. Message(). " n"; } // Poursuite de l'exécution Bonjour le monde'; echo 'Bonjour 18
Source �Jérôme CUTRONA, Programmation WEB, 2015 19
- Slides: 19