La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

PHP5 objet "avancé" Jérôme CUTRONA 09:56:48 Programmation Web 2014-2015 1.

Présentations similaires


Présentation au sujet: "PHP5 objet "avancé" Jérôme CUTRONA 09:56:48 Programmation Web 2014-2015 1."— Transcription de la présentation:

1 PHP5 objet "avancé" Jérôme CUTRONA jerome.cutrona@univ-reims.fr 09:56:48 Programmation Web 2014-2015 1

2 A UTO - CHARGEMENT DE CLASSES 209:56:48 Programmation Web 2014-2015

3 Auto-chargement de classes __autoload  Appelée si une classe n'est pas encore définie au moment de son utilisation  Dernière chance pour inclure automagiquement une définition de classe  Besoin d’une règle claire entre le nom de classe et le nom du fichier contenant sa définition  function __autoload($class_name) { require_once $class_name. '.class.php'; } $a = new Cercle() ;  require_once 'Cercle.class.php'; 309:56:48 Programmation Web 2014-2015

4 M ÉTHODES MAGIQUES 409:56:48 Programmation Web 2014-2015

5 Méthodes "magiques"  Ensemble de méthodes commençant par ' __‘ __construct, __destruct __construct, __destruct __toString __toString __clone __clone __get, __set __get, __set __isset, __unset __isset, __unset __call __call __callStatic (PHP 5.3) __callStatic (PHP 5.3) __invoke() __invoke() __sleep, __wakeup __sleep, __wakeup __set_state() __set_state() 509:56:48 Programmation Web 2014-2015

6 C ONSTRUCTEUR / DESTRUCTEUR 609:56:48 Programmation Web 2014-2015

7 __construct, __destruct  __construct Constructeur de l'objet Constructeur de l'objet Appelé lors de l'utilisation de new Appelé lors de l'utilisation de new $c = new Point(10, -12) ; $c = new Point(10, -12) ;  __destruct Destructeur de l'objet Destructeur de l'objet Appelé lorsque la dernière référence sur un objet est perdue Appelé lorsque la dernière référence sur un objet est perdue $c = new Point(10, -12) ; $c = null ; $c = new Point(10, -12) ; $c = null ; 709:56:48 Programmation Web 2014-2015

8 __toString  Permet de décrire le comportement de la classe lorsqu'une instance est convertie en chaîne  Avant PHP 5.2, __toString n'est appelée que lors d'une combinaison directe avec echo ou print  $a = new Affichable('Bonjour'); echo $a ; 809:56:48 Programmation Web 2014-2015

9 C ONVERSION EN CHAÎNE 909:56:48 Programmation Web 2014-2015

10 __toString class Affichable { // en PHP 5.1.2 public $d; public $d; public function __construct($_d) public function __construct($_d) { $this->d = $_d ; } { $this->d = $_d ; } public function __toString() public function __toString() { return $this->d ; } { return $this->d ; }} $a = new Affichable('Bonjour'); echo $a ; echo "Mon objet affichable :".$a."\n" ; echo "Mon objet affichable :$a\n" ; 1009:56:48 Programmation Web 2014-2015 Bonjour Mon objet affichable :Object id #1

11 C OPIE D ’ OBJETS 1109:56:48 Programmation Web 2014-2015

12 __clone  Permet de décrire le comportement de la classe lorsqu'une instance est clonée  $objet2 = clone $objet1 ;  Clonage par défaut : copie des propriétés  Nécessaire si : une propriété est un objet devant être dupliqué une propriété est un objet devant être dupliqué compteur d'instances d'une classe compteur d'instances d'une classe  Ne peut PAS être appelée directement  Intervient après la copie superficielle (=)  Ne concerne que l'objet cloné (identiques) 1209:56:48 Programmation Web 2014-2015

13 __clone class A { } class B { } class Z { protected $a ; protected $a ; protected $b ; protected $b ; public function __construct() { public function __construct() { $this->a = new A() ; $this->a = new A() ; $this->b = new B() ; } $this->b = new B() ; } } $z1 = new Z() ; $z1 = new Z() ; var_dump($z1) ; var_dump($z1) ; $z2 = clone $z1 ; $z2 = clone $z1 ; var_dump($z2) ; var_dump($z2) ; 1309:56:48 Programmation Web 2014-2015 object(Z)#1 (2) { ["a:protected"]=> object(A)#2 (0) { } ["a:protected"]=> object(A)#2 (0) { } ["b:protected"]=> object(B)#3 (0) { } ["b:protected"]=> object(B)#3 (0) { }} object(Z)#4 (2) { ["a:protected"]=> object(A)#2 (0) { } ["a:protected"]=> object(A)#2 (0) { } ["b:protected"]=> object(B)#3 (0) { } ["b:protected"]=> object(B)#3 (0) { }}

14 __clone class A { } class B { } class Z { protected $a ; protected $a ; protected $b ; protected $b ; public function __construct() { public function __construct() { $this->a = new A() ; $this->a = new A() ; $this->b = new B() ; } $this->b = new B() ; } } $z1 = new Z() ; $z1 = new Z() ; $z2 = clone $z1 ; $z2 = clone $z1 ; 1409:56:48 Programmation Web 2014-2015 Z $a$a$a$a $b$b$b$b $z1 A B Z $a$a$a$a $b$b$b$b $z2 Clonage de l'objet Z : duplication de l'objet par copie superficielle des attributs (simple =)

15 __clone class A { } class B { } class Z { protected $a ; protected $a ; protected $b ; protected $b ; public function __construct() { public function __construct() { $this->a = new A() ; $this->a = new A() ; $this->b = new B() ; } $this->b = new B() ; } public function __clone() { public function __clone() { $this->a = clone $this->a ; } $this->a = clone $this->a ; } } $z1 = new Z() ; $z1 = new Z() ; var_dump($z1) ; var_dump($z1) ; $z2 = clone $z1 ; $z2 = clone $z1 ; var_dump($z2) ; var_dump($z2) ; 1509:56:48 Programmation Web 2014-2015 object(Z)#1 (2) { ["a:protected"]=> object(A)#2 (0) { } ["a:protected"]=> object(A)#2 (0) { } ["b:protected"]=> object(B)#3 (0) { } ["b:protected"]=> object(B)#3 (0) { }} object(Z)#4 (2) { ["a:protected"]=> object(A)#5 (0) { } ["a:protected"]=> object(A)#5 (0) { } ["b:protected"]=> object(B)#3 (0) { } ["b:protected"]=> object(B)#3 (0) { }}

16 __clone class A { } class B { } class Z { protected $a ; protected $a ; protected $b ; protected $b ; public function __construct() { public function __construct() { $this->a = new A() ; $this->a = new A() ; $this->b = new B() ; } $this->b = new B() ; } public function __clone() { public function __clone() { $this->a = clone $this->a ; } $this->a = clone $this->a ; } } $z1 = new Z() ; $z1 = new Z() ; $z2 = clone $z1 ; $z2 = clone $z1 ; 1609:56:48 Programmation Web 2014-2015 Z $a$a$a$a $b$b$b$b $z1 A B Z $a$a$a$a $b$b$b$b $z2 Clonage de l'objet Z : duplication de l'objet par copie superficielle des attributs (simple =) A

17 S URCHARGE D ’ ATTRIBUTS ET DE MÉTHODES 1709:56:48 Programmation Web 2014-2015

18 Surcharge en PHP  Attributs : Possibilité de décrire le comportement d’une classe lorsqu’un attribut inaccessible tente d’être : lu : $x = $obj->attr lu : $x = $obj->attr modifié : $obj->attr = $x modifié : $obj->attr = $x testé : if (isset($obj->attr)) … testé : if (isset($obj->attr)) … supprimé : unset($obj->attr) supprimé : unset($obj->attr)  Méthodes : Possibilité de décrire le comportement d’une classe lorsqu’une méthode de classe ou d’instance tente d’être lancée 1809:56:48 Programmation Web 2014-2015

19 A CCESSEURS / RÉAFFECTEURS 1909:56:48 Programmation Web 2014-2015

20 __get, __set  Permet de surcharger l'accès à des données membres inaccessibles d'une classe en lecture ( __get ) et en écriture ( __set )  Ne sont déclenchées que si la propriété demandée n'est pas accessible (private, protected ou inexistante)  Les méthodes ne doivent PAS être static  Les méthodes surchargées doivent être public  Permet de donner un accès simplifié à des propriétés non accessibles directement  Permet éventuellement d'effectuer des contrôles 2009:56:48 Programmation Web 2014-2015

21 __get, __set class Point { private $coord ; private $coord ; public function __construct($_x, $_y) { public function __construct($_x, $_y) { if (!is_numeric($_x) || !is_numeric($_y)) { if (!is_numeric($_x) || !is_numeric($_y)) { throw new Exception( throw new Exception( "Paramètres non numériques ($_x, $_y)") ; "Paramètres non numériques ($_x, $_y)") ; } } $this->coord['x'] = $_x ; $this->coord['x'] = $_x ; $this->coord['y'] = $_y ; $this->coord['y'] = $_y ; }… 2109:56:48 Programmation Web 2014-2015 $p = new Point(1, 12) ;

22 __get public function __get($_prop) { public function __get($_prop) { if (!array_key_exists($_prop, $this->coord)) { if (!array_key_exists($_prop, $this->coord)) { throw new Exception( throw new Exception( "Accès à une propriété inconnue ($_prop)") ; "Accès à une propriété inconnue ($_prop)") ; } return $this->coord[$_prop] ; return $this->coord[$_prop] ; }… 2209:56:48 Programmation Web 2014-2015 echo "p: ({$p->x}, {$p->y})\n" ; echo "p: ({$p->z}, {$p->t})\n" ; p: (1, 12) Fatal error: Uncaught exception 'Exception' with message 'Accès à une propriété inconnue (z)' in surcharge.php:19 Stack trace: #0 surcharge.php(37): Point->__get('z') #1 {main} thrown in surcharge.php on line 19 #1 {main} thrown in surcharge.php on line 19

23 __set public function __set($_prop, $_val) { public function __set($_prop, $_val) { if (!is_numeric($_val)) { if (!is_numeric($_val)) { throw new Exception( throw new Exception( "Valeur non numérique ($_val)") ; "Valeur non numérique ($_val)") ; } } if (!array_key_exists($_prop, $this->coord)) { if (!array_key_exists($_prop, $this->coord)) { throw new Exception( throw new Exception( "Accès à une propriété inconnue ($_prop)") ; "Accès à une propriété inconnue ($_prop)") ; } } return $this->coord[$_prop] = $_val ; return $this->coord[$_prop] = $_val ; }} 2309:56:48 Programmation Web 2014-2015 $p->x = -12 ; echo "p: ({$p->x}, {$p->y})\n" ; p: (-12, 12)

24 __isset, __unset  Permet de surcharger l'accès à des données membres inaccessibles d'une classe par isset() ( __isset ) et par unset() ( __unset )  Ne sont déclenchées que si la propriété demandée n'est pas accessible (private, protected ou inexistante)  Les méthodes ne doivent PAS être static  Les méthodes surchargées doivent être public  Permet de donner un accès simplifié à des propriétés non accessibles directement  Permet éventuellement d'effectuer des contrôles 2409:56:48 Programmation Web 2014-2015

25 M ÉTHODES 2509:56:48 Programmation Web 2014-2015

26 __call  Permet de surcharger l'accès à des méthodes non accessibles d'une classe  N'est déclenchée que si la méthode demandée n'est pas accessible (private, protected ou inexistante)  Ne doit PAS être static  Doit être public  Permet de donner un accès simplifié à des méthodes non accessibles directement 2609:56:48 Programmation Web 2014-2015

27 __call class Moteur { public function demarrer() { echo "Vroummm\n" ; } public function demarrer() { echo "Vroummm\n" ; } public function arreter() { echo "...\n" ; } } public function arreter() { echo "...\n" ; } } class Voiture { private $moteur ; private $moteur ; public function __construct() public function __construct() { $this->moteur = new Moteur() ; } { $this->moteur = new Moteur() ; } public function __call($_method, $_params) { public function __call($_method, $_params) { if (!method_exists($this->moteur, $_method)) if (!method_exists($this->moteur, $_method)) throw new Exception( throw new Exception( "Méthode inconnue ($_method)") ; "Méthode inconnue ($_method)") ; call_user_func_array(array($this->moteur, call_user_func_array(array($this->moteur, $_method), $_method), $_params) ; } } $_params) ; } } 2709:56:48 Programmation Web 2014-2015

28 __call $v = new Voiture() ; $v->demarrer() ; $v->arreter() ; $v->avancer() ; 2809:56:48 Programmation Web 2014-2015 Vroummm... Fatal error: Uncaught exception 'Exception' with message 'Méthode inconnue (avancer)' in surcharge.php:61 Stack trace: #0 [internal function]: Voiture->__call('avancer', Array) #0 [internal function]: Voiture->__call('avancer', Array) #1 surcharge.php(70): Voiture->avancer() #1 surcharge.php(70): Voiture->avancer() #2 {main} thrown in surcharge.php on line 61 #2 {main} thrown in surcharge.php on line 61

29 __callStatic (PHP 5.3)  Permet de surcharger l'accès à des méthodes static non accessibles d'une classe  N'est déclenchée que si la méthode demandée n'est pas accessible (private, protected ou inexistante)  Doit être static  Doit être public  Permet de donner un accès simplifié à des méthodes non accessibles directement 2909:56:48 Programmation Web 2014-2015

30 __callStatic (PHP 5.3) class Moteur { public static function demarrer() public static function demarrer() { echo "Vroummm\n" ; } public static function arreter() public static function arreter() { echo "...\n" ; } } class Voiture { public static function __callStatic($_method, $_params){ if (!method_exists("Moteur", $_method)) if (!method_exists("Moteur", $_method)) throw new Exception( throw new Exception( "Méthode statique inconnue ($_method)") ; "Méthode statique inconnue ($_method)") ; call_user_func_array(array("Moteur", $_method), call_user_func_array(array("Moteur", $_method), $_params) ; } } $_params) ; } } 3009:56:48 Programmation Web 2014-2015

31 __callStatic (PHP 5.3) Voiture::demarrer() ; Voiture::arreter() ; Voiture::avancer() ; 3109:56:48 Programmation Web 2014-2015 Vroummm... Fatal error: Uncaught exception 'Exception' with message 'Accès à une méthode statique inconnue (avancer)' in callStatic.php on line 8 Call Stack: 1. {main}() callStatic.php:0 2. Voiture::avancer() callStatic.php:17 3. Voiture::__callStatic() callStatic.php:0

32 O BJET FONCTION 3209:56:48 Programmation Web 2014-2015

33 __invoke  Description du comportement d’un classe lorsqu’une instance est utilisée comme une fonction $t = new Traceur('log.txt') ; $t('Début') ; 3309:56:48 Programmation Web 2014-2015

34 __invoke class Traceur { private $_nomFichier = null ; private $_nomFichier = null ; private $_ressource = null ; private $_ressource = null ; public function __construct($fichier) { public function __construct($fichier) { $this->_nomFichier = $fichier ; $this->_nomFichier = $fichier ; $this->_ouvrirFichier() ; $this->_ouvrirFichier() ; $this->ecrire('Fin construction') ; $this->ecrire('Fin construction') ; } public function __destruct() { public function __destruct() { $this->ecrire('Prêt pour la destruction') ; $this->ecrire('Prêt pour la destruction') ; fclose($this->_ressource) ; fclose($this->_ressource) ; } private function _ouvrirFichier() { private function _ouvrirFichier() { $this->_ressource = fopen($this->_nomFichier, 'a') ; $this->_ressource = fopen($this->_nomFichier, 'a') ; } public function ecrire($texte) { public function ecrire($texte) { $ligne = strftime('%c'). ' : '. $texte. "\n" ; $ligne = strftime('%c'). ' : '. $texte. "\n" ; fwrite($this->_ressource, $ligne) ; fwrite($this->_ressource, $ligne) ; }… 3409:56:48 Programmation Web 2014-2015

35 __invoke … public function __invoke($texte) { public function __invoke($texte) { $this->ecrire($texte) ; $this->ecrire($texte) ; }} $t = new Traceur('log.txt') ; $t('Début') ; sleep(2) ; $t('Suite') ; sleep(3) ; $t('Terminé !') ; readfile('log.txt') ; 3509:56:48 Programmation Web 2014-2015 Tue Oct 11 00:04:14 2011 : Fin construction Tue Oct 11 00:04:14 2011 : Début Tue Oct 11 00:04:16 2011 : Suite Tue Oct 11 00:04:19 2011 : Terminé !

36 L INÉARISATION D ’ OBJETS 3609:56:48 Programmation Web 2014-2015

37 Linéarisation d’objets  Stockage d’une variable dans une forme « dormante » entre deux scripts  La variable est réduite à une chaîne de caractères contenant ses caractéristiques  La dé-linéarisation permet de retrouver la variable restaurée dans sa forme utilisable  Les objets peuvent être (dé-)linéarisés  Les attributs de classe posent problème  Les attributs de type « ressource » posent problème 3709:56:48 Programmation Web 2014-2015

38 __sleep, __wakeup class Traceur { private $_nomFichier = null ; private $_nomFichier = null ; private $_ressource = null ; private $_ressource = null ; public function __construct($fichier) { public function __construct($fichier) { $this->_nomFichier = $fichier ; $this->_nomFichier = $fichier ; $this->_ouvrirFichier() ; $this->_ouvrirFichier() ; $this->ecrire('Fin construction') ; $this->ecrire('Fin construction') ; } public function __destruct() { public function __destruct() { $this->ecrire('Prêt pour la destruction') ; $this->ecrire('Prêt pour la destruction') ; fclose($this->_ressource) ; fclose($this->_ressource) ; } private function _ouvrirFichier() { private function _ouvrirFichier() { $this->_ressource = fopen($this->_nomFichier, 'a') ; $this->_ressource = fopen($this->_nomFichier, 'a') ; } public function ecrire($texte) { public function ecrire($texte) { $ligne = strftime('%c'). ' : '. $texte. "\n" ; $ligne = strftime('%c'). ' : '. $texte. "\n" ; fwrite($this->_ressource, $ligne) ; fwrite($this->_ressource, $ligne) ; }… 3809:56:48 Programmation Web 2014-2015 Type ressource : Ne peut pas être linéarisé !

39 __sleep, __wakeup … public function __sleep() { public function __sleep() { return array('_nomFichier') ; return array('_nomFichier') ; } public function __wakeup() { public function __wakeup() { $this->_ouvrirFichier() ; $this->_ouvrirFichier() ; $this->ecrire('Debout là-dedans !') ; $this->ecrire('Debout là-dedans !') ; }} if (isset($_SESSION['TRACEUR'])) { $t = $_SESSION['TRACEUR'] ; $t = $_SESSION['TRACEUR'] ;} else { $t = new Traceur('log.txt') ; $t = new Traceur('log.txt') ;} $t('Début') ; sleep(2) ; $t('Suite') ; sleep(3) ; $t('Terminé !') ; $_SESSION['TRACEUR'] = $t ; readfile('log.txt') ; 3909:56:48 Programmation Web 2014-2015

40 A BSTRACTION DE CLASSES 4009:56:48 Programmation Web 2014-2015

41 Abstraction de classes  Classes et méthodes abstraites  Impossibilité de créer une instance d’une classe abstraite  Toute classe contenant une méthode abstraite doit être définie abstraite  Méthode abstraite : pas d'implémentation  Implémentation de toutes les méthodes abstraites d'une classe dans la classe dérivée  Méthodes abstraites protégées ou publiques 4109:56:48 Programmation Web 2014-2015

42 Abstraction de classes : exemple 4209:56:48 Programmation Web 2014-2015 abstract class Abstraite { abstract protected function nom() ; function affiche() { echo "Mon nom est '{$this->nom()}'" ; }} class Concrete extends Abstraite { protected function nom() { protected function nom() { return "Concrete" ; }} $a = new Abstraite() ; $c = new Concrete() ; $c->affiche() ; Classe abstraite Méthode abstraite protégée Concrétisation de la classe abstraite Implémentation de la méthode abstraite Instanciation de la classe abstraite Instanciation de la classe concrète Fatal error: Cannot instantiate abstract class Abstraite in dummy.php on line 72 Mon nom est 'Concrete'

43 T YPAGE DES PARAMÈTRES 4309:56:48 Programmation Web 2014-2015

44 Typage des paramètres  Les paramètres des fonctions et méthodes peuvent être typés  Les types sont alors forcément des types définis par l'utilisateur ou des tableaux (PHP 5.1)  function puissance(Entier $_n, Entier $_p) { … } 4409:56:48 Programmation Web 2014-2015

45 Typage des paramètres class Entier { public $v ; public $v ; public function __construct($_v) { public function __construct($_v) { $this->v = $_v ; } $this->v = $_v ; } public function egal(self $a) { public function egal(self $a) { return intval($this->v == $a->v) ; } return intval($this->v == $a->v) ; }} $E1 = new Entier(10) ; $E2 = new Entier(20) ; echo $E1->egal($E2) ; echo $E1->egal(12) ; 4509:56:48 Programmation Web 2014-2015 0 Argument 1 passed to Entier::egal() must be an instance of Entier, integer given, …

46 I NTERFACES 4609:56:48 Programmation Web 2014-2015

47 Interfaces  Permet de spécifier quelles méthodes doivent être implémentées par une classe  Les méthodes doivent être identiques : au niveau du nom au niveau du nom au niveau du nombre de paramètres au niveau du nombre de paramètres au niveau de la nature de paramètres au niveau de la nature de paramètres  Une classe peut implémenter plusieurs interfaces  Une classe peu implémenter une interface à n'importe quel niveau de la hiérarchie 4709:56:48 Programmation Web 2014-2015

48 Interfaces : exemple 4809:56:48 Programmation Web 2014-2015 interface Comparable { public function compare(self $a) ; public function compare(self $a) ;} class Entier implements Comparable { public $v ; public $v ; public function __construct($_v) { public function __construct($_v) { $this->v = $_v ; $this->v = $_v ; } } public function compare(self $a) { public function compare(self $a) { return intval($this->v == $a->v) ; return intval($this->v == $a->v) ; }} Interface Méthode de l'interface Classe implémentant l'interface Méthode de l'interface

49 P ARCOURS D ’ OBJETS 4909:56:48 Programmation Web 2014-2015

50 Parcours d’objets  Parcours des attributs visibles avec foreach class Point { private $x = 0 ; private $y = 0 ; protected $dim = 2 ; public $nom = "un point" ; public function parcours() { foreach ($this as $prop => $val) foreach ($this as $prop => $val) echo "$prop: $val\n" ; } echo "$prop: $val\n" ; }} $p = new Point() ; foreach ($p as $prop => $val) echo "$prop: $val\n" ; echo "$prop: $val\n" ; $p->parcours() ; 5009:56:48 Programmation Web 2014-2015 nom : un point x: 0 y: 0 dim : 2 nom : un point

51 M OT CLÉ FINAL 5109:56:48 Programmation Web 2014-2015

52 Mot clé final (méthode)  Rend impossible la surcharge d’une méthode par les classes filles class Simple { final public function affiche() { echo "Je suis Simple" ; } } class Etendue extends Simple { public function affiche() { parent::affiche() ; echo " mais aussi Etendue" ; }} 5209:56:48 Programmation Web 2014-2015 Cannot override final method Simple::affiche()

53 Mot clé final (classe)  La classe ne peut plus être étendue final class Simple { public function affiche() { echo "Je suis Simple" ; } } class Etendue extends Simple { public function affiche() { parent::affiche() ; echo " mais aussi Etendue" ; }} 5309:56:48 Programmation Web 2014-2015 Class Etendue may not inherit from final class (Simple)

54 E SPACES DE NOMS NAMESPACE 5409:56:48 Programmation Web 2014-2015

55 Espaces de noms  But : Éviter les collisions de noms pour les classes, interfaces, fonctions et constantes Éviter les collisions de noms pour les classes, interfaces, fonctions et constantes Pouvoir créer des alias des espaces de noms afin d’en simplifier l’accès Pouvoir créer des alias des espaces de noms afin d’en simplifier l’accès  Syntaxe associée : namespace monespace;  Utilisation hiérarchique : namespace projet; namespace projet; namespace projet\interface; namespace projet\interface; namespace projet\interface\html; namespace projet\interface\html; 5509:56:48 Programmation Web 2014-2015

56 Déclaration d’espaces de noms <?php namespace Projet\MySQL; class Connexion { /*... */ } namespace Projet\LDAP; class Connexion { /*... */ } 5609:56:48 Programmation Web 2014-2015

57 Déclaration d’espaces de noms <?php namespace Projet\MySQL { class Connexion { /*... */ } } namespace Projet\LDAP { class Connexion { /*... */ } } 5709:56:48 Programmation Web 2014-2015

58 Utilisation des espaces de noms <?php require_once 'mysql.php' ; require_once 'ldap.php' ; $mysql = new Projet\MySQL\Connexion() ; $ldap = new Projet\LDAP\Connexion() ; 5809:56:48 Programmation Web 2014-2015

59 Utilisation des espaces de noms <?php require_once 'mysql.php' ; require_once 'ldap.php' ; use Projet\MySQL ; $mysql = new MySQL\Connexion() ; $ldap = new Projet\LDAP\Connexion() ; 5909:56:48 Programmation Web 2014-2015

60 Utilisation des espaces de noms <?php require_once 'mysql.php' ; require_once 'ldap.php' ; use Projet\MySQL as BD ; $mysql = new BD\Connexion() ; $ldap = new Projet\LDAP\Connexion() ; 6009:56:48 Programmation Web 2014-2015

61 Utilisation des espaces de noms <?php require_once 'mysql.php' ; require_once 'ldap.php' ; class Connexion { /*... */ } use Projet\MySQL ; $mysql = new MySQL\Connexion() ; $ldap = new Projet\LDAP\Connexion() ; $ftp = new Connexion() ; 6109:56:48 Programmation Web 2014-2015

62 Espace de noms global <?php namespace Projet ; class Exception extends \Exception {} $pe = new Exception() ; $e = new \Exception() ; 6209:56:48 Programmation Web 2014-2015


Télécharger ppt "PHP5 objet "avancé" Jérôme CUTRONA 09:56:48 Programmation Web 2014-2015 1."

Présentations similaires


Annonces Google