Mais conteúdo relacionado
Semelhante a PHP 5 et la programmation objet (20)
PHP 5 et la programmation objet
- 2. 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
- 3. 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
- 4. Constantes de classe
Abstraction de classes
Interfaces
Surcharge
Parcours d'objets
Masques
Méthodes magiques LightPath 2014© - http://www.jmrenouard.fr
4
- 5. Mot-clé "final"
Clonage d'objets
Comparaison d'objets
Réflexion
Typage objet
Les exceptions
Les traits
LightPath 2014© - http://www.jmrenouard.fr
5
- 7. 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
- 8. 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
- 10. 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
- 12. 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
- 13. class A {
function __construct() {
print "A la construction de l'objet de type classe An";
}
}
LightPath 2014© - http://www.jmrenouard.fr
13
- 14. class A {
function __destruct() {
print "A la destruction de l'objet de type classe An";
}
}
LightPath 2014© - http://www.jmrenouard.fr
14
- 16. 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
- 19. 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
- 20. 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
- 22. 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
- 23. Variable dont la valeur est immuable
◦const constant = 'valeur constante';
LightPath 2014© - http://www.jmrenouard.fr
23
- 25. 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
- 27. 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
- 29. 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
- 30. $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 => $valuen";
}
LightPath 2014© - http://www.jmrenouard.fr
30
- 31. 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
- 32. __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
- 34. 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
- 36. 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
- 38. 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
- 40. 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
- 41. 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
- 42. Connaitre la structure de la classe ReflexionFunction
<?php
Reflection::export(new ReflectionClass('ReflexionFunction'));
?>
LightPath 2014© - http://www.jmrenouard.fr
42
- 44. 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
- 46. 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
- 47. 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";
}
LightPath 2014© - http://www.jmrenouard.fr
47
- 49. 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
- 50. 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
- 52. LightPath:
◦Société de conseil et d‟ingénierie
◦Formations, Conseil, Audit et mise en oeuvre
◦jmrenouard@lightpath.fr
Jean-Marie RENOUARD
◦jmrenouard@gmail.com
◦Twitter: @jmrenouard
◦http://www.jmrenouard.fr
LightPath 2014© - http://www.jmrenouard.fr
52