ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage 285 Cours de Programmation Web : PHP Chapitre 5 : Orienté objet en PHP.

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

PHP5 its a kind of magic. Chargement automatique function __autoload( $nom_classe ) { require_once('obj/'.$nom_classe.'.class.php'); } si on exécute le.
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
C.
Tarak Chaari, Stéphane Frénot, Frédérique Laforest, Frédéric Le-Mouël JAV1 JAV – TD 5 Lhéritage en Java.
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
PHP5 poo.
PHP5 its a kind of magic. Chargement automatique function __autoload( $nom_classe ) { require_once('obj/'.$nom_classe.'.class.php'); } si on exécute le.
Programmation Orientée Objet (POO)
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
Jérôme CUTRONA PHP objet Jérôme CUTRONA 01:08:01 Programmation Web
11:37:32 Programmation Web PHP5 objet "avancé" Jérôme CUTRONA
PHP Interface base de données
Leçon 3 : Héritage IUP 2 Génie Informatique
Introduction à la POO: Les classes vs les objets
Le langage PHP 5.
Chapitre III Héritage (début)
Programmation orientée objet
Langage Oriente Objet Cours 4.
Principes de programmation (suite)
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
C++ : classes Introduction aux Langages Orientés Objets
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Classes abstraites et Interfaces
Langage Oriente Objet Cours 2.
Structures de données IFT-2000
Structures de données IFT-10541
Introduction au paradigme orienté-objet (suite)
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Types de données abstrait et mécanismes d'encapsulation
Langages orientés objets
Chapitre III Héritage. POO-L3 H. Fauconnier2 Chapitre III: Héritage A) Extensions généralités Affectation et transtypage B) Méthodes Surcharge et signature.
Cours 4 Héritage (suite).
COURS DE PROGRAMMATION ORIENTEE OBJET :
CSI1502 Principes fondamentaux en conception des logiciels
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Héritage Licence Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier.
Héritage et composition
Travaux Pratiques Représentation des connaissances
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
Copyright © SUPINFO. All rights reserved La Programmation Orientée Objet en C# 2.0.
La notion de type revisitée en POO
Cours 61 6 La sécurité, Portée, Visibilité Programmer avec sécurité.
11/04/ L'héritage Cours 7 Cours 7.
Programmation objet La base.
Cours 7 Classes locales Clonage Divers: tableaux.
Créer des packages.
Tutorat en bio-informatique
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
PHP 7° PARTIE : PROGRAMMATION OBJET
Tutorat en bio-informatique Le 14 novembre Au programme… Les objets –Propriétés (attributs) –Constructeurs –Méthodes.
C++ L’HERITAGE Fayçal BRAÏKI DUT INFORMATIQUE.
PHP objet Jérôme CUTRONA 10:13:27 Programmation Web
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
Cours LCS N°4 Présenté par Mr: LALLALI
Cours du 5 novembre.
Héritage H. Batatia. plan Notion (que signifie l’héritage) Ecriture en java Héritage multiple (interdit) Instanciation (partie propre et partie héritée)
Les classes Introduction aux Langages Orientés Objets
PHP5 objet "avancé" Jérôme CUTRONA 09:56:48 Programmation Web
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Introduction à la programmation objet avec java
Héritage Conception par Objet et programmation Java
Bases de données Singleton pour la connexion
BlueJ_III 1 Java, les objets : tout de suite ! Interaction entre objets Notes de cours associées au chapitre 3 tutorial BlueJ
Transcription de la présentation:

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage 285 Cours de Programmation Web : PHP Chapitre 5 : Orienté objet en PHP

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage 286 Chapitre 5: plan 1. PHP est OO (introduction) ‏ 2. La syntaxe « objet » en PHP 3. Les fondamentaux OO en PHP 4. OO avancé en PHP 5. Quelques fonctions en vrac...

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage PHP est OO !!!  Nouveau modèle objet en PHP 5 (versus PHP 4) ‏  Concepts de : classes (abstraites et concrètes), attributs, méthodes, objets...  Principes de : héritage, encapsulation et même... un peu de polymorphisme !!!

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage La syntaxe “objet” en PHP 2.1. La création d'une classe 2.2. L'instantiation d'un objet 2.3. La manipulation d'un objet

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage La création d'une classe Mot-clef: class Syntaxe : class { } Peut être défini n'importe où Est un « type », construit par le programmeur class Voiture { // contenu }

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage La création d'une classe Les attributs : –Déclarés comme public, private ou protected (PHP 4 : var), mais ne sont pas typés ! –Avec optionnellement une valeur affectée (valeur par défaut)‏ –Constitueront les « données » de l'objet instantié class Voiture { public $marque; public $puissance = "2CV"; }

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage La création d'une classe Les méthodes : –Se déclarent comme des fonctions –Une seule méthode du même nom par classe (pas de surcharge !!!)‏ –Peuvent prendre des paramètres, qui peuvent être typés (>< PHP 4). On ne peut que typer des paramètres de fonction par des objets (et pas des types de base). –Peuvent retourner une valeur

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage 292 class Voiture { function donneConso() { return 30; } class Voiture { function donneConso($nbreKm){ return 30 * $nbreKm; } 2.1. La création d'une classe

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage La création d'une classe Les constantes : –Définir des constantes locales à une classe (pas en PHP 4)‏ –Se déclare avec const et sans le symbole $ –Par convention, en majuscule class Voiture { const PROPULSION = 1; const TRACTION = 2; }

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage L'instantiation d'un objet Mot-clef: new Syntaxe : $ = new [()]; Un objet est une instance de classe (une variable dont le type est la classe)‏ La classe doit être déclarée, avant d'être instantiée $uneVoiture = new Voiture();

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage L'instantiation d'un objet Accéder aux attributs: –Uniquement sur un OBJET créé –Opérateur -> –Sans le symbole $ après l'opérateur -> –Possible d'utiliser des attributs non déclarés class Voiture { public $marque; public $puissance = "2CV"; } $uneVoiture = new Voiture(); echo $uneVoiture->puissance; echo $uneVoiture->attributVide;

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage L'instantiation d'un objet Accéder aux méthodes : –Uniquement sur un OBJET créé –Opérateur: -> –Référence à l'objet courant : $this –Valeur de retour directement utilisable (>< PHP4). On peut même avoir: $objet->methode()->methode()‏

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage L'instantiation d'un objet <?php class Voiture { public $nbreLitre = 30; function donneConso($nbreKm) { return $this->nbreLitre * $nbreKm; } function donneConsoAnnuelle($nbreKm,$nbreJours=20) { return $this->donneConso($nbreKm) * $nbreJours; } $uneVoiture = new Voiture; echo $uneVoiture->donneConsoAnnuelle(10); ?>

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage L'instantiation d'un objet Le constructeur : –Méthode d'initialisation de l'objet –Appelée automatiquement avec le « new » –Peut prendre des paramètres –(constructeur parent pas appelé implicitement)‏ –Deux possibilités : -__construct() (PHP 5 seulement)‏ -Méthode du même nom que la classe (PHP 4, et PHP 5 si pas de __construct())‏

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage L'instantiation d'un objet Le destructeur : –Méthode de destruction de l'objet –Appelée automatiquement avec les fonctions unset() ou delete()‏ –(desctructeur parent pas appelé implicitement)‏ –Nommée __destruct()‏

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage L'instantiation d'un objet <?php class Date { public $jour; public $mois; public $annee; function __construct($jour,$mois,$annee) { $this->jour = $jour; $this->mois = $mois; $this->annee = $annee; echo 'objet créé'; } function __destruct() { echo 'objet detruit'; } $monAnniversaire = new Date(18,4,1911); echo $monAnniversaire->jour. "/". $monAnniversaire->mois. "/". $monAnniversaire->annee; unset($monAnniversaire); ?>

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage La manipulation d'un objet Objets passés par référence : –Depuis PHP5, >< PHP 4 objets passés par valeur –On manipule des références et non pas le contenu des objets –Phénomène de l'aliasing

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage 302 <?php // script PHP5, le resultat est different en PHP 4 class Date { public $jour; public $mois; public $annee; } $monAnniversaire = new Date(); $monAnniversaire->jour = 18; $monAnniversaire->mois = 4; $monAnniversaire->annee = 1911; $tonAnniversaire = $monAnniversaire; $tonAnniversaire->annee = 1982; echo $tonAnniversaire->annee; // affiche 1982, en PHP 5 echo " "; echo $monAnniversaire->annee; // affiche aussi 1982, en PHP 5 ?>

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage 303 <?php // FORCER L'ALIASING EN PHP 4 !, OK en PHP 5 class Date { var $jour; var $mois; var $annee; } $monAnniversaire = new Date(); $monAnniversaire->jour = 18; $monAnniversaire->mois = 4; $monAnniversaire->annee = 1911; $tonAnniversaire = & $monAnniversaire; $tonAnniversaire->annee = 1982; echo $tonAnniversaire->annee; echo " "; echo $monAnniversaire->annee; ?>

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage La manipulation d'un objet Objets passés par référence : => 2 conséquences : –Comparer deux objets: comparer le contenu et pas seulement la référence !!! –Copier un objet (2 objets différents, mais au contenu identique) nécessite un traitement particulier

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage La manipulation d'un objet Comparer deux objets : –Tester l'égalité de tous les attributs : opérateur == –Tester l'égalité des références (identité des objets): opérateur ===

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage 306 <?php class Date { public $jour; public $mois; public $annee; } $monAnniversaire = new Date(); $monAnniversaire->jour = 18; $monAnniversaire->mois = 4; $monAnniversaire->annee = 1911; $unAnniversaire = new Date(); $unAnniversaire->jour = 18; $unAnniversaire->mois = 4; $unAnniversaire->annee = 1911; $tonAnniversaire = $monAnniversaire; if ($monAnniversaire == $tonAnniversaire) echo "monAnniversaire == tonAnniversaire"; if ($monAnniversaire === $tonAnniversaire) echo "monAnniversaire === tonAnniversaire"; if ($monAnniversaire == $unAnniversaire) echo "monAnniversaire == unAnniversaire"; if ($monAnniversaire === $unAnniversaire) echo "monAnniversaire === unAnniversaire"; ?>

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage La manipulation d'un objet Copier un objet : –Fonction : clone -Où est l'objet à copier. -Copiage bit à bit de toutes les valeurs de l'objets source vers l'objet destination –Possible de redéfinir son comportement en définissant une méthode __clone() dans la classe, pour modifier l'objet cloné par clone() (en utilisant $this)‏

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage 308 <?php class Date { public $jour; public $mois; public $annee; } $monAnniversaire = new Date(); $monAnniversaire->jour = 18; $monAnniversaire->mois = 4; $monAnniversaire->annee = 1911; $tonAnniversaire = clone $monAnniversaire; echo $tonAnniversaire->jour. "/". $tonAnniversaire->mois. "/". $tonAnniversaire->annee; ?>

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage 309 <?php class Date { public $jour; public $mois; public $annee; function __clone() { $this->jour +=1; $this->mois +=1; $this->annee +=1; } $monAnniversaire = new Date(); $monAnniversaire->jour = 18; $monAnniversaire->mois = 4; $monAnniversaire->annee = 1911; $tonAnniversaire = clone $monAnniversaire; echo $tonAnniversaire->jour. "/". $tonAnniversaire->mois. "/". $tonAnniversaire->annee; ?>

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage Les fondamentaux OO en PHP 3.1. L'encapsulation 3.2. L'héritage 3.3. Le polymorphisme

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage L'encapsulation Par défaut, attributs et méthodes sont « public » -Méthodes: pas de modificateur de visibilité nécessaire (= public)‏ -Attributs: si pas de modificateur de visibilité, on doit spécifier « var » (= public)‏ class Voiture { var $nbreLitre = 30; // = public function donneConso($nbreKm) { return $this->nbreLitre * $nbreKm; }

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage L'encapsulation Possible de contrôler l'accès aux membres de la classe -“private”: accessible uniquement depuis la classe elle- même -“protected”: accessible uniquement depuis la classe elle- même et depuis ses sous-classes Possible d'utiliser des « getter » et des « setter »

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage 313 <?php class Voiture { private $nbreLitre; function getNbreLitre() { return $this->nbreLitre; } function setNbreLitre($nbreLitre) { $this->nbreLitre = $nbreLitre; } function donneConso($nbreKm) { return $this->nbreLitre * $nbreKm; } function donneConsoAnnuelle($nbreKm,$nbreJours=20) { return $this->donneConso($nbreKm) * $nbreJours; } $uneVoiture = new Voiture; $uneVoiture->setNbreLitre(30); echo "consommation annuelle : ". $uneVoiture- >donneConsoAnnuelle(100, 30); echo " pour un nbre de litre : ". $uneVoiture->getNbreLitre(); ?>

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage L'héritage Héritage simple et strict : Simple : une seule super-classe Strict : toute méthode ré-écrite doit être compatible avec celle de la classe mère (possible d'ajouter des paramètres supplémentaires aux méthodes réécrites, mais ils doivent être facultatifs; possible de supprimer des paramètres obligatoires dans les méthodes réécrites) (sinon warning E_STRICT)‏ Mot-clef: extends

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage 315 <?php class Date { public $jour; public $mois; public $annee; } class DateHeure extends Date { public $heure; public $minute; public $seconde; } $uneDateHeure = new DateHeure(); $uneDateHeure->jour = 18; $uneDateHeure->mois = 4; $uneDateHeure->annee = 1911; $uneDateHeure->heure = 18; $uneDateHeure->minute = 30; $uneDateHeure->seconde = 10; echo $uneDateHeure->jour. "/". $uneDateHeure->mois. "/". $uneDateHeure->annee. " "; echo $uneDateHeure->heure. "h". $uneDateHeure->minute. ":". $uneDateHeure->seconde; ?>

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage L'héritage Ré-écriture : D'attributs : si un attribut est ré-écrit dans une classe fille, c'est sa dernière définition qui est utilisée pour déterminer la valeur par défaut dans l'objet de la classe fille De méthodes : respect de l'héritage strict pour éviter les warnings Appel possible de la méthode de la super-classe, par « parent:: () »

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage 317 <?php class Vehicule { public $nombreRoues; function afficher() { echo "vehicule : nbre roues ". $this->nombreRoues; } class Voiture extends Vehicule { public $tailleCoffre; function afficher() parent::afficher(); echo "voiture : taille du coffre ". $this->tailleCoffre; } ?> 3.2. L'héritage

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage Le polymorphisme Polymorphisme réduit, mais existant: Nécessite un typage : donc uniquement possible via les paramètres de fonction (PHP 5 uniquement)‏ Seulement sur les classes, pas sur les types de base

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage 319 <?php class Vehicule { public $nombreRoues; function afficher() { echo "vehicule : nbre roues ". $this->nombreRoues; } class Voiture extends Vehicule { public $tailleCoffre; function afficher() parent::afficher(); echo "voiture: taille du coffre ". $this->tailleCoffre; } function affichage(Vehicule $unVehicule) { $unVehicule->afficher(); } $maVoiture = new Voiture(); $maVoiture->tailleCoffre=300; $maVoiture->nombreRoues=4; affichage($maVoiture); ?>

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage OO avancé en PHP 4.1. Classe abstraite 4.2. Interface et implémentation 4.3. Eléments « final » 4.4. Eléments « static »

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage Classe abstraite Classe ne pouvant pas être instantiée (sinon erreur « fatale »)‏ Peut contenir des attributs et des méthodes « classiques » Peut contenir des méthodes « abstract »: si une méthode est « abstract », alors la classe doit être « abstract »

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage Classe abstraite Méthode « abstract » : Méthode pas implémentée (body est vide, la classe contient la seule la signature de la méthode)‏ Doit être implémentée dans la sous-classe (ou être re- déclarée abstract dans cette sous-classe)‏ // classe abstract, pas de methode abstract abstract class Vehicule { public $nombreRoues; function afficher() { echo "vehicule : nbre roues ". $this->nombreRoues; }

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage L'instantiation d'un objet <?php abstract class Polygone { public $nbreCotes; abstract function calculSurface(); // devra etre ré-écrite !!! } class Rectangle extends Polygone { public $longueur; public $largeur; function __construct($longueur, $largeur) { $this->longueur = $longueur; $this->largeur = $largeur; $this->nbreCotes = 4; } function calculSurface() { return $this->longueur * $this->largeur; } function affiche() { return $this->nbreCotes. $this->largeur. $this->longueur. $this->calculSurface(); } $unRectangle = new Rectangle(2,5); echo $unRectangle->affiche(); ?>

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage Interface et implémentation Une interface est un composant, qui n'est pas une classe Une interface contient une ou plusieurs signature(s) de méthodes Une classe peut implémenter 0, 1 ou plusieurs interfaces Une classe qui implémente une interface doit implémenter (donner un corps à) chaque méthode de l'interface

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage 325 <?php interface estAffichable { function affiche(); } interface estImprimable { function imprime($nbreFois); } abstract class Vehicule { public $nombreRoues; function affiche() { return "vehicule : nbre roues ". $this->nombreRoues; } class Voiture extends Vehicule implements estAffichable, estImprimable { public $tailleCoffre; function imprime($nbreFois) { for ($i =0; $i < $nbreFois; $i++) { echo $this->affiche(); echo " "; } function affiche() { return parent::affiche(). " voiture : taille du coffre ". $this->tailleCoffre; } $maVoiture = new Voiture(); $maVoiture->tailleCoffre=300; $maVoiture->nombreRoues=4; $maVoiture->imprime(2); ?>

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage 326 <?php interface estAffichable { function affiche(); } interface estImprimable { function imprime($nbreFois); } abstract class Vehicule { public $nombreRoues; function affiche() { return "vehicule : nbre roues ". $this->nombreRoues; } class Voiture extends Vehicule implements estAffichable, estImprimable { public $tailleCoffre; function imprime($nbreFois) { for ($i =0; $i < $nbreFois; $i++) { echo $this->affiche(); echo " "; } function affiche() { return parent::affiche(). " voiture : taille du coffre ". $this->tailleCoffre; } function imprimante(estImprimable $imprimable) { // prend une interface comme paramètre $imprimable->imprime(3); } $maVoiture = new Voiture(); $maVoiture->tailleCoffre=300; $maVoiture->nombreRoues=4; imprimante($maVoiture); // casting d'un objet dans son interface !!! ?>

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage Elements « final » Classe « final » : ne pouvant pas avoir de sous-classe Méthode « final » : ne pouvant pas être réécrite final class Voiture { public $tailleCoffre; final function afficher() { echo "vehicule : nbre roues ". $this->nombreRoues; }

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage Elements « static » Deux possibilités : Appel statique d'une méthode classique Déclaration statique d'un attribut ou d'une méthode (de classe)‏

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage Elements « static » Appel statique d'une méthode “classique” : appel de la méthode, sans passer par l'objet, directement sur la classe La méthode ne doit pas contenir de $this (car pas défini, puisque pas d'objet)‏ Syntaxe : :: ()‏ <?php class Voiture { function test() { echo "test"; } echo Voiture::test(); ?>

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage Elements « static » Déclaration « static » d'un attribut ou d'une méthode Éléments « static » ne sont appelables que sur la classe seulement $this ne peut pas être employé (car pas défini, puisque pas d'objet)‏ $self désigne la classe elle-même Syntaxe : :: ()‏ ::$

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage 331 <?php class Voiture { static $roues = 4; static function test() { return self::$roues; } echo Voiture::$roues++; // update class attribute echo Voiture::test(); // affiche 4 5 ?> 4.4. Eléments « static »

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage Quelques fonctions 5.1. Constantes de debug (__class__ Affichage d'objet (__toString)‏ 5.3. Fonctions de type (instance of, getClass, get_parent_class)‏ 5.4. Divers : __autoload, __set, __call, __get

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage Constantes de debug Deux méta-constantes utiles pour le debug ou le tracing : __CLASS__ : donne le nom de la classe courante __METHOD__ : donne le nom de la méthode courante <?php class Voiture { function test() { echo "classe : ". __CLASS__. ", methode : ". __METHOD__ ; } $voiture = new Voiture(); $voiture->test(); ?>

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage Affichage d'objet Affichage direct d'un objet => erreur ! Utilisation de la méthode __toString() : Ré-écrire cette méthode dans une classe Affichage direct d'un objet de cette classe => exécution de la méthode __toString réécrite <?php class Voiture { function __toString() { return "ceci est une voiture"; } $voiture = new Voiture(); echo $voiture; ?>

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage Fonctions de type d'objet Vérifier qu'un objet appartient à une classe donnée ou à une de ses sous-classes instance of Donner la classe d'un objet : get_class( )‏ Donner la classe père d'un objet : get_parent_class( )‏

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage Quelques fonctions en vrac... __sleep() et __wakeup() : permettent de gérer la mise en session d'objets connectés à des ressources externes (fichiers...) __set($nom, $valeur) : méthode appelée lors de l'affectation d'une valeur à un attribut inexistant __get($nom) : méthode appelée lors de la consultation d'un attribut inexistant (Mutator)‏ __call($nom, $valeur) : méthode appelée lors de l'appel de méthodes inexistantes ($valeur = 1 tableau de paramètres) (Accessor)‏

ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage Quelques fonctions en vrac... __autoload($nom) : Fonction appelée lors de l'instantiation d'un objet d'une classe inexistante Le paramètre $nom est le nom de la classe manquante Permet de charger automatiquement le fichier PHP <?php function __autoload($nom) { require_once($nom. ".class.php"); } $voiture = new Voiture(); echo $voiture; ?>