Upload
jean-marie-renouard
View
230
Download
9
Embed Size (px)
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
Jean-Marie RENOUARD ◦ [email protected]
◦ Twitter: @jmrenouard
◦ http://www.jmrenouard.fr
LightPath 2014© - http://www.jmrenouard.fr 52