52
Jean-Marie Renouard LightPath 2014©

PHP 5 et la programmation objet

Embed Size (px)

DESCRIPTION

Présentation des aspects objet du PHP 5

Citation preview

Page 1: PHP 5 et la programmation objet

Jean-Marie Renouard LightPath 2014©

Page 2: PHP 5 et la programmation objet

Le logo PHP est du domaine public http://commons.wikimedia.org/wiki/File:PHP-logo.svg

Ce document est licencié sous licence ◦ Attribution-NonCommercial-ShareAlike

◦ CC BY-NC-SA

Plus de détails: http://creativecommons.org/licenses/by-nc-sa/3.0/fr/

LightPath 2014© - http://www.jmrenouard.fr 2

Page 3: PHP 5 et la programmation objet

Syntaxe de base

Auto-chargement de classes

Constructeurs et destructeurs

Visibilité

L'héritage

L'opérateur de résolution de portée (::)

Les données statiques

LightPath 2014© - http://www.jmrenouard.fr 3

Page 4: PHP 5 et la programmation objet

Constantes de classe

Abstraction de classes

Interfaces

Surcharge

Parcours d'objets

Masques

Méthodes magiques

LightPath 2014© - http://www.jmrenouard.fr 4

Page 5: PHP 5 et la programmation objet

Mot-clé "final"

Clonage d'objets

Comparaison d'objets

Réflexion

Typage objet

Les exceptions

Les traits

LightPath 2014© - http://www.jmrenouard.fr 5

Page 6: PHP 5 et la programmation objet

LightPath 2014© - http://www.jmrenouard.fr 6

Page 7: PHP 5 et la programmation objet

Mot clé : class

Exemple

class A {

function toto() { echo « toto de A » ; }

}

class B{

function titi(){ A::toto(); }

}

LightPath 2014© - http://www.jmrenouard.fr 7

Page 8: PHP 5 et la programmation objet

Creation d'objet de la classe

$a = new A();

$b = new B();

Utilisation des objets

$b->titi();

B::titi();

$a->toto();

A::toto();

LightPath 2014© - http://www.jmrenouard.fr 8

Page 9: PHP 5 et la programmation objet

LightPath 2014© - http://www.jmrenouard.fr 9

Page 10: PHP 5 et la programmation objet

Exécution automatique de code de chargement de classe

function __autoload($class_name) {

require_once $class_name . '.php';

}

$obj = new MaClasse1();

$obj2 = new MaClasse2();

LightPath 2014© - http://www.jmrenouard.fr 10

Page 11: PHP 5 et la programmation objet

LightPath 2014© - http://www.jmrenouard.fr 11

Page 12: PHP 5 et la programmation objet

Constructeur : fonction spéciale exécutée à la création de l'objet

1 seul constructeur possible

Plusieurs paramètres possibles

Destructeur : fonction spéciale éxécutée à la destruction de l'objet

LightPath 2014© - http://www.jmrenouard.fr 12

Page 13: PHP 5 et la programmation objet

class A {

function __construct() {

print "A la construction de l'objet de type classe A\n";

}

}

LightPath 2014© - http://www.jmrenouard.fr 13

Page 14: PHP 5 et la programmation objet

class A {

function __destruct() {

print "A la destruction de l'objet de type classe A\n";

}

}

LightPath 2014© - http://www.jmrenouard.fr 14

Page 15: PHP 5 et la programmation objet

LightPath 2014© - http://www.jmrenouard.fr 15

Page 16: PHP 5 et la programmation objet

Accès “public” : accès depuis l'extérieur

Accès “protected” : accès depuis une classe dérivée

Accès “private” : accès depuis une fonction de la classe uniquement

LightPath 2014© - http://www.jmrenouard.fr 16

Page 17: PHP 5 et la programmation objet

LightPath 2014© - http://www.jmrenouard.fr 17

Page 18: PHP 5 et la programmation objet

LightPath 2014© - http://www.jmrenouard.fr 18

Page 19: PHP 5 et la programmation objet

Moyen de généraliser des traitements

Moyen de dériver des comportements spécifiques

Mot clé : exends

◦ class deriveB extends A

LightPath 2014© - http://www.jmrenouard.fr 19

Page 20: PHP 5 et la programmation objet

Moyen d'accèder au membre d'une classe

Résolution des ambibuités de nommage

$a n'est pas équivalent à $MaClasse::a

self::xxx est un espace de nommage pointant sur l'objet courant

parent:: xxx est un espace de nommage de la classe de base

LightPath 2014© - http://www.jmrenouard.fr 20

Page 21: PHP 5 et la programmation objet

LightPath 2014© - http://www.jmrenouard.fr 21

Page 22: PHP 5 et la programmation objet

Les variables statiques sont des variables communes à toutes les instances de la classe

Le code d'une fonction statique n'est pas dupliqué

La variable statique possède des contraintes d'accès concurrentiels

LightPath 2014© - http://www.jmrenouard.fr 22

Page 23: PHP 5 et la programmation objet

Variable dont la valeur est immuable

◦ const constant = 'valeur constante';

LightPath 2014© - http://www.jmrenouard.fr 23

Page 24: PHP 5 et la programmation objet

LightPath 2014© - http://www.jmrenouard.fr 24

Page 25: PHP 5 et la programmation objet

L'abstraction de classe consiste à déclarer des fonctions sans code.

Seule une classe dérivée ( extends ) définissant le code des fonctions peut être instanciée.

La démocratie : principe abstrait

La république : incarnation concrète de la démocratie

LightPath 2014© - http://www.jmrenouard.fr 25

Page 26: PHP 5 et la programmation objet

LightPath 2014© - http://www.jmrenouard.fr 26

Page 27: PHP 5 et la programmation objet

Un ensemble de déclaration sans code.

Equivalent à une classe n'ayant que des fonctions publiques abstraites

Mot clé “implements” permets à une classe de se faire passer pour l'interface

interface Dieu {

public function invoquerLePouvoir();

}

LightPath 2014© - http://www.jmrenouard.fr 27

Page 28: PHP 5 et la programmation objet

LightPath 2014© - http://www.jmrenouard.fr 28

Page 29: PHP 5 et la programmation objet

La lecture et l'écriture peuvent être interceptées

void __set ( string name, mixed value )

mixed __get ( string name )

bool __isset ( string name )

void __unset ( string name )

mixed __call ( string name, array arguments )

LightPath 2014© - http://www.jmrenouard.fr 29

Page 30: PHP 5 et la programmation objet

$this : variable contenant l'objet courant

$this vu comme un tableau à clé

Chaque objet vu comme tableau à clé

$class = new MyClass();

foreach($class as $key => $value) {

print "$key => $value\n";

}

LightPath 2014© - http://www.jmrenouard.fr 30

Page 31: PHP 5 et la programmation objet

Modèle de conception

◦ Factory : modèle permettant de faciliter la

construction d'un nouvel objet

◦ Singleton : modèle permettant de limiter le nombre

d'objet crée par classe

LightPath 2014© - http://www.jmrenouard.fr 31

Page 32: PHP 5 et la programmation objet

__sleep :Avant sérialisation de l'objet

__wakeup : Après sérialisation de l'objet

__toString : conversion en chaîne

__set_state : export de la définition des objets

__clone : Opération en cas de clonage

LightPath 2014© - http://www.jmrenouard.fr 32

Page 33: PHP 5 et la programmation objet

LightPath 2014© - http://www.jmrenouard.fr 33

Page 34: PHP 5 et la programmation objet

La fonction “final” est la dernière de la hiérarchie.

La fonction ne peut pas être dérivée

LightPath 2014© - http://www.jmrenouard.fr 34

Page 35: PHP 5 et la programmation objet

LightPath 2014© - http://www.jmrenouard.fr 35

Page 36: PHP 5 et la programmation objet

Dupliquer un objet et l'ensemble de son état

Copie de zone mémoire

Ce n'est pas une simple copie de référence

Fonction spéciale : __clone

$copie_d_objet = clone $objet;

LightPath 2014© - http://www.jmrenouard.fr 36

Page 37: PHP 5 et la programmation objet

LightPath 2014© - http://www.jmrenouard.fr 37

Page 38: PHP 5 et la programmation objet

Pas de surcharge possible des opérateurs

A défaut, écrire une fonction de comparaison

Les opérateurs classiques ne comparent que l'adresse ou référence.

L'état et le type des objets ne comptent pas dans les comparaisons par opérateur

LightPath 2014© - http://www.jmrenouard.fr 38

Page 39: PHP 5 et la programmation objet

LightPath 2014© - http://www.jmrenouard.fr 39

Page 40: PHP 5 et la programmation objet

Capacité d'introspecter la définition d'une variable

API permettant :

◦ Créer des instances

◦ Consulter les méthodes des classes

◦ Récupérer l'information sur la classe

LightPath 2014© - http://www.jmrenouard.fr 40

Page 41: PHP 5 et la programmation objet

class Reflection : classe de base

class ReflectionFunction : Introspection de fonction

class ReflectionParameter: Introspection de paramètre

class ReflectionMethod : Introspection de méthodes

class ReflectionClass : Introspection de classe

class ReflectionObject: Introspection d'objet

class ReflectionProperty : Introspection de propriété

class ReflectionExtension : Extension de l'introspection

LightPath 2014© - http://www.jmrenouard.fr 41

Page 42: PHP 5 et la programmation objet

Connaitre la structure de la classe ReflexionFunction

<?php

Reflection::export(new ReflectionClass('ReflexionFunction'));

?>

LightPath 2014© - http://www.jmrenouard.fr 42

Page 43: PHP 5 et la programmation objet

LightPath 2014© - http://www.jmrenouard.fr 43

Page 44: PHP 5 et la programmation objet

Les objets sont de type objet :)

Typage dynamique est sous jacent au modèle objet

Plusieurs types possibles

On peut imposer le type dans les fonctions

◦ function test_array(array $input);

◦ function test_class_A(A $a);

LightPath 2014© - http://www.jmrenouard.fr 44

Page 45: PHP 5 et la programmation objet

LightPath 2014© - http://www.jmrenouard.fr 45

Page 46: PHP 5 et la programmation objet

Bloc à surveiller : try { ... }

Exception à traiter catch( Exception e) {...}

Pas de bloc finally comme en C++ ou Java ◦ Bloc Finally uniquement à partir de PHP 5.5

Lancement d'exception : throw new Exception(« message »);

LightPath 2014© - http://www.jmrenouard.fr 46

Page 47: PHP 5 et la programmation objet

Try {

$error = 'Toujours lancer cette erreur';

throw new Exception($error);

// le code suivant une exception n'est pas exécuté.

echo 'Jamais exécuté';

}catch (Exception $e) {

echo "Capture de l'exception : ", $e->getMessage(),

"\n";

}

finally { echo “toujours afficher quelque soit le résultat en

PHP 5.5”}

LightPath 2014© - http://www.jmrenouard.fr 47

Page 48: PHP 5 et la programmation objet

LightPath 2014© - http://www.jmrenouard.fr 48

Page 49: PHP 5 et la programmation objet

Bloc de code insérable dans une classe

Evite la redondance(copier/coller) dans les objets

Equivalent d‟un include ou require version objet

Uniquement en PHP 5.4

Syntaxe: ◦ trait DireBonjour {

public function direBonjour() { echo „Bonjour'; } }

LightPath 2014© - http://www.jmrenouard.fr 49

Page 50: PHP 5 et la programmation objet

Utilisation d‟un trait dans une classe

Mot clé use

Exemple:

class MaClassePoli { use DireBonjour;

function direAdieu() {

echo “Adieu”;

} }

LightPath 2014© - http://www.jmrenouard.fr 50

Page 51: PHP 5 et la programmation objet

Documentation du PHP http://www.php.net/docs

LightPath 2014© - http://www.jmrenouard.fr 51

Page 52: PHP 5 et la programmation objet

LightPath: ◦ Société de conseil et d‟ingénierie

◦ Formations, Conseil, Audit et mise en œuvre

[email protected]

Jean-Marie RENOUARD ◦ [email protected]

◦ Twitter: @jmrenouard

◦ http://www.jmrenouard.fr

LightPath 2014© - http://www.jmrenouard.fr 52