PHP 5 et la programmation objet

Preview:

DESCRIPTION

Présentation des aspects objet du PHP 5

Citation preview

Jean-Marie Renouard LightPath 2014©

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

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

Constantes de classe

Abstraction de classes

Interfaces

Surcharge

Parcours d'objets

Masques

Méthodes magiques

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

Mot-clé "final"

Clonage d'objets

Comparaison d'objets

Réflexion

Typage objet

Les exceptions

Les traits

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

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

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

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

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

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

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

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

class A {

function __construct() {

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

}

}

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

class A {

function __destruct() {

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

}

}

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

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

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

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

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

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

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

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

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

Variable dont la valeur est immuable

◦ const constant = 'valeur constante';

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

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

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

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

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

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

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

$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

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

__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

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

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

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

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

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

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

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

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

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

Connaitre la structure de la classe ReflexionFunction

<?php

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

?>

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

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

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

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

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

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

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

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

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

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

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

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

◦ Formations, Conseil, Audit et mise en œuvre

◦ jmrenouard@lightpath.fr

Jean-Marie RENOUARD ◦ jmrenouard@gmail.com

◦ Twitter: @jmrenouard

◦ http://www.jmrenouard.fr

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

Recommended