SlideShare une entreprise Scribd logo
1  sur  37
PHP objet
Jérôme CUTRONA
jerome.cutrona@univ-reims.fr
13:36:50 Programmation Web 2022-2023 1
RAPPELS DE DÉVELOPPEMENT OBJET
2
13:36:50 Programmation Web 2022-2023
Développement objet
 Définition de briques logicielles représentant un concept, une idée
ou une entité ainsi que leurs interactions : les objets
 Un objet est une structure de données comprenant également les
fonctionnalités de traitement des données
 L’objet est vu au travers de ses spécifications
 Les concepts associés sont :
 Encapsulation
 Héritage
 Polymorphisme
3
13:36:50 Programmation Web 2022-2023
Classe
 Une classe définit un modèle, un moule, à partir duquel tous les
objets de la classe seront créés
 La classe décrit les données internes ainsi que les fonctionnalités
des objets
 La classe est une vision « inerte », une recette de cuisine, visant
à décrire la structure et le comportement des objets qui seront
créés
 La construction d’un objet à partir de la classe génératrice
s’appelle instanciation
 Les objets, entités « vivantes » en mémoire, sont des instances
de la classe
4
13:36:50 Programmation Web 2022-2023
Instanciation
 La classe est une description « inerte »
 Les objets doivent être instanciés à partir de la classe génératrice
pour exister et devenir fonctionnels
 Exemple : la classe Animal
$bambi = new Animal();
$scrat = new Animal();
$melman = new Animal();
5
13:36:50 Programmation Web 2022-2023
Encapsulation
 Procédé consistant à rassembler les données et les traitements
au sein des objets
 L’implémentation interne des objets est cachée
 Les objets sont vus à travers leurs spécifications
 Les données internes et les fonctionnalités possèdent un niveau
de visibilité et peuvent éventuellement être masquées :
 Public
 Privé
 Protégé
6
13:36:50 Programmation Web 2022-2023
Encapsulation
 Les données internes des objets sont appelées attributs (ou
propriétés voire champs)
 Les fonctionnalités des objets sont appelées méthodes
 Méthodes habituelles :
 Constructeur / destructeur
 Accesseurs / modificateurs (getters / setters)
 Référence à l’objet courant dans la description de la classe :
$this
7
13:36:50 Programmation Web 2022-2023
Visibilité
 Publique :
Les données internes et les méthodes sont accessibles par tous
 Protégé :
Les données internes et les méthodes sont accessibles aux
objets dérivés
 Privé :
Les données internes et les méthodes ne sont accessibles qu’aux
objets de la classe
8
13:36:50 Programmation Web 2022-2023
Héritage ou dérivation ou extension
 Création de nouvelles classes à partir du modèle d’une classe
existante
 La nouvelle classe possède tous les attributs et méthodes de la
classe mère
 La nouvelle classe peut proposer de nouveaux attributs et de
nouvelles méthodes ou spécialiser des méthodes de la classe
mère
9
13:36:50 Programmation Web 2022-2023
Impala Caribou
Herbivore
Guépard Léopard
Carnivore
Mammifère
Polymorphisme
 Choix dynamique de la méthode qui correspond au type réel de
l’objet
 Méthode eats()
 function food(Mammifere $m) {
return $m->eats();
}
 $i = new Impala(); food($i);
 $c = new Carnivore(); food($c);
10
13:36:50 Programmation Web 2022-2023
Impala
herbe
Caribou
mousse
Herbivore
plantes
Guépard
impala
Léopard
impala
Carnivore
viande
Mammifère
nourriture
herbe
viande
CLASSE, ATTRIBUTS ET MÉTHODES
D’INSTANCE
11
13:36:50 Programmation Web 2022-2023
Définition d'une classe
class MyClass
{
private string $myData;
public function __construct(string $param) {
$this->myData = $param;
}
public function __destruct() {
echo 'Destruction...’;
}
public function show(): void {
echo 'my data : ' . $this->myData;
}
}
12
13:36:50 Programmation Web 2022-2023
Attribut privé
Déclaration de classe
Constructeur public
Référence à l’instance
courante
Méthode publique
Accès à un attribut
Destructeur public
Utilisation d'une classe
<?php
require 'myClass.php';
// Nouvel objet
$object = new MyClass(12);
// Utilisation d'une méthode
$object->show();
$object->myData = 'coucou';
unset($o);
13
13:36:50 Programmation Web 2022-2023
Inclusion de la définition
de la classe
Création d'un objet
Méthode affiche de
l'objet $object
L'attribut est privé
Fatal error: Cannot access private
property MyClass::$myData in dummy.php on
line 25
class MyClass {
private $myData;
...
Destruction de l'objet
$object
Destruction...
function __destruct() {
echo 'Destruction...'; }
Valeur par défaut des attributs
class MyClass
{
private string $myData = 'Défaut';
public function set(string $value): void
{ $this->myData = $value; }
public function show(): void
{ echo 'my data : '.$this->myData; }
}
$o = new MyClass();
$o->show();
$o->set('Nouvelle');
$o->show();
14
13:36:50 Programmation Web 2022-2023
Attribut avec valeur par
défaut
Nouvel objet
Affichage
Affectation
Affichage
my data : Défaut
my data : Nouvelle
ATTRIBUTS ET MÉTHODES DE CLASSE
15
13:36:50 Programmation Web 2022-2023
Attributs et méthodes de classe
 Mot clé static
 Attributs et méthodes utilisables sans instance de la classe
(=attributs et méthode de classe)
 Attributs NE peuvent PAS être accédés depuis une instance
($objet->attribut)
 Attributs partagés par toutes les instances de la classe
 Méthodes peuvent être accédés depuis une instance
($objet->methode() mais c’est mal !)
 Dans les méthodes, $this n'est pas disponible
16
13:36:50 Programmation Web 2022-2023
Attributs de classe (static)
class MyClass {
private static int $n = 0;
public function __construct() {
echo ++MyClass::$n
.' instance(s)'; }
public function __destruct() {
echo 'destruction'; self::$n--; }
}
$s = new MyClass();
$t = new MyClass();
unset($t);
$u = new MyClass();
$v = new MyClass();
echo MyClass::$n;
17
13:36:50 Programmation Web 2022-2023
Attribut privé statique :
ne peut être accédé que
par des méthodes de la
classe
Accès à l'attribut
statique
1 instance(s)
2 instance(s)
destruction
2 instance(s)
3 instance(s)
Fatal error: Cannot access private property
MyClass::$n in dummy.php on line 37
Méthodes de classe (static)
class MyClass {
private static int $n = 0;
public function __construct() {
echo ++MyClass::$n." instance(s)n"; }
public function __destruct() {
MyClass::$n--; }
public static function f(int $i): void {
echo 'Dans f() : '.($i*$i); }
}
$s = new MyClass();
$s->f(2);
MyClass::f(3);
18
13:36:50 Programmation Web 2022-2023
Méthode publique de
classe
Appel à partir d'une instance
Toléré
Appel sans instance
1 instance(s)
Dans f() : 4
Dans f() : 9
CONSTANTES
19
13:36:50 Programmation Web 2022-2023
Constantes de classe
class MyClass {
public const MY_CONSTANT = 'Valeur';
public function show(): void
{
echo self::MY_CONSTANT;
}
}
$c = new MyClass();
$c->show();
echo MyClass::MY_CONSTANT;
20
13:36:50 Programmation Web 2022-2023
Constante publique de
classe
(visibilité depuis
PHP7.1)
Accès à la constante de
classe depuis la classe
Accès à la constante de
classe à l'extérieur de la
classe
Valeur
Valeur
HÉRITAGE
21
13:36:50 Programmation Web 2022-2023
Héritage
22
13:36:50 Programmation Web 2022-2023
class Simple {
function show(): void {
echo 'Je suis Simple'; }
}
class Extended extends Simple {
function show(): void {
parent::show();
echo ' mais aussi Extended';
}
}
$s = new Simple();
$e = new Extended();
$s->show();
$e->show();
Classe simple
Une méthode publique
Classe étendue héritant
de la classe simple
Surcharge de la méthode
Appel de la méthode du
parent
Je suis Simple mais aussi Extended
Je suis Simple
AFFECTATION, CLONAGE, PASSAGE DE
PARAMÈTRES
23
13:36:50 Programmation Web 2022-2023
Assignation (affectation) d'objets
class Point {
private int $x;
private int $y;
public function __construct(int $x=0, int $y=0) {
$this->x = $x;
$this->y = $y; }
public function set(int $x, int $y): void {
$this->x = $x;
$this->y = $y; }
public function __toString(): string {
return "({$this->x}, {$this->y})"; }
}
24
13:36:50 Programmation Web 2022-2023
Assignation (affectation) d'objets
$segment = [];
$point = new Point();
for ($i=10; $i<20; $i++)
{
$point->set($i, $i);
$segment[] = $point;
}
foreach ($segment as $k => $p)
echo "$k: {$p}n";
25
13:36:50 Programmation Web 2022-2023
0: (19, 19)
1: (19, 19)
2: (19, 19)
3: (19, 19)
4: (19, 19)
5: (19, 19)
6: (19, 19)
7: (19, 19)
8: (19, 19)
9: (19, 19)
$point
0,0
$segment
0
1
2
3
4
5
6
7
8
9
10,10
11,11
12,12
13,13
14,14
15,15
16,16
17,17
18,18
19,19
Clonage d'objets
$segment = [];
$point = new Point();
for ($i=10; $i<20; $i++)
{
$point->set($i, $i);
$segment[] = clone $point;
}
foreach ($segment as $k => $p)
echo "$k: {$p}n";
26
13:36:50 Programmation Web 2022-2023
0: (10, 10)
1: (11, 11)
2: (12, 12)
3: (13, 13)
4: (14, 14)
5: (15, 15)
6: (16, 16)
7: (17, 17)
8: (18, 18)
9: (19, 19)
$point
0,0
$segment
0
1
2
3
4
5
6
7
8
9
10,10
11,11
12,12
13,13
14,14
15,15
16,16
17,17
18,18
19,19
10,10
11,11
12,12
13,13
14,14
15,15
16,16
17,17
18,18
19,19
Objets comme arguments de fonctions
function origin(Point $p): void
{
$p->set(0, 0);
}
$point = new Point(10, 10);
echo "avant: {$point}n";
origin($point);
echo "après: {$point}n";
27
13:36:50 Programmation Web 2022-2023
avant: (10, 10)
après: (0, 0)
Passage de l'objet Point
par référence
ARGUMENTS / PARAMÈTRES NOMMÉS
28
13:36:50 Programmation Web 2022-2023
Arguments / paramètres nommés
class Point {
private int $x;
private int $y;
public function __construct(int $x=0, int $y=0) {
$this->x = $x;
$this->y = $y; }
 Passer un argument selon son nom et pas sa position
 $point = new Point(0);
 $point = new Point(y: 0);
29
13:36:50 Programmation Web 2022-2023
OBJETS DANS LES CHAÎNES DE CARACTÈRES
30
13:36:50 Programmation Web 2022-2023
Objets dans les chaînes de caractères
 Problèmes :
 ambiguïté
 non évaluable
 Chaîne contenant :
 un attribut d'un objet dans une chaîne
"a : $myObject->attribute"
 le résultat d'une méthode d'un objet dans une chaîne
"résultat : $myObject->compute()"
 une entrée de tableau associatif
 "valeur : $myArray['key']"
 une variable suivie de texte (sans espace)
"$amount contient $amuonteuros"
31
13:36:50 Programmation Web 2022-2023
Objets dans les chaînes de caractères
 Solution :
 effectuer des concaténations (pénible)
 délimiter par { }
 Chaîne contenant :
 un attribut d'un objet dans une chaîne
"a : {$myObject->attribute}"
 le résultat d'une méthode d'un objet dans une chaîne
"résultat : {$myObject->compute()}"
 une entrée de tableau associatif
 "valeur : {$myArray['key']}"
 une variable suivie de texte (sans espace)
"$amount contient {$amount}euros"
32
13:36:50 Programmation Web 2022-2023
EXCEPTIONS
33
13:36:50 Programmation Web 2022-2023
Gestion des erreurs : exceptions
 Gestion des exception identiques à C++/Java
 Exception peut être :
 Jetée : throw
 Essayée : try
 Capturée : catch
 Exception jetée : code après throw non exécuté
 Capture : 1 ou plusieurs blocs (selon type)
 Exception non capturée : erreur fatale
34
13:36:50 Programmation Web 2022-2023
Utilisation des exceptions
try {
$error = 'Toujours lancer cette erreur';
throw new Exception($error);
/* Le code après une exception n'est
jamais exécuté. */
echo 'Jamais exécuté'; }
catch (Exception $exception) {
echo "Capture Exception: "
.$exception->getMessage()." n"; }
// Poursuite de l'exécution
echo 'Bonjour le monde';
35
13:36:50 Programmation Web 2022-2023
Déroutement
Essayer
Lancer
Capturer
Capture Exception: Toujours lancer cette erreur
Bonjour le monde
Classe Exception PHP 8
<?php
class Exception {
protected string $message = ''; // message de l'exception
protected int $code = 0; // code de l'exception
protected string $file; // fichier source de l'exception
protected int $line; // ligne de la source de l'exception
public function __construct(string $message="", int $code=0);
final public function getMessage(): string // message de l'exception
final public function getCode(): mixed // code de l'exception
final public function getFile(): string // nom du fichier source
final public function getLine(): int // ligne du fichier source
final public function getTrace(): array // un tableau de backtrace()
final public function getTraceAsString(): string // chaîne de trace
public function __toString(): string // chaîne pour l'affichage
} 36
13:36:50 Programmation Web 2022-2023
Catch multiple
class Test {
public function testing() {
// ...
throw new InvalidArgumentException();
// ...
throw new RuntimeException();
// ...
}
}
try {
$foo = new Test; $foo->testing();
} catch (InvalidArgumentException | RuntimeException $exception) {
var_dump(get_class($exception));
}
37
13:36:50 Programmation Web 2022-2023

Contenu connexe

Similaire à S2-02-PHP-objet.pptx

Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5Kristen Le Liboux
 
Doctrine en dehors des sentiers battus
Doctrine en dehors des sentiers battusDoctrine en dehors des sentiers battus
Doctrine en dehors des sentiers battusRomaric Drigon
 
Ecriture de classes javascript
Ecriture de classes javascriptEcriture de classes javascript
Ecriture de classes javascriptThierry Gayet
 
Présentation de DBAL en PHP
Présentation de DBAL en PHPPrésentation de DBAL en PHP
Présentation de DBAL en PHPMickael Perraud
 
Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...
Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...
Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...Tarik Zakaria Benmerar
 
Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech daysJean-Pierre Vincent
 
Les bonnes pratiques de l'architecture en général
Les bonnes pratiques de l'architecture en généralLes bonnes pratiques de l'architecture en général
Les bonnes pratiques de l'architecture en généralGeoffrey Bachelet
 
Meet up symfony 11 octobre 2016 - Les formulaire
Meet up symfony 11 octobre 2016 - Les formulaireMeet up symfony 11 octobre 2016 - Les formulaire
Meet up symfony 11 octobre 2016 - Les formulaireJulien Vinber
 
Optimisation et administration avancée d’Active Directory - Par Thierry Deman
Optimisation et administration avancée d’Active Directory - Par Thierry DemanOptimisation et administration avancée d’Active Directory - Par Thierry Deman
Optimisation et administration avancée d’Active Directory - Par Thierry DemanIdentity Days
 
programmation orienté objet c++
programmation orienté objet c++programmation orienté objet c++
programmation orienté objet c++coursuniv
 
Présentation de DBAL en PHP (Nantes)
Présentation de DBAL en PHP (Nantes)Présentation de DBAL en PHP (Nantes)
Présentation de DBAL en PHP (Nantes)Mickael Perraud
 
Patterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptPatterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptMicrosoft Technet France
 
Programmation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationProgrammation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationECAM Brussels Engineering School
 

Similaire à S2-02-PHP-objet.pptx (20)

Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5
 
Doctrine en dehors des sentiers battus
Doctrine en dehors des sentiers battusDoctrine en dehors des sentiers battus
Doctrine en dehors des sentiers battus
 
Ecriture de classes javascript
Ecriture de classes javascriptEcriture de classes javascript
Ecriture de classes javascript
 
Présentation de DBAL en PHP
Présentation de DBAL en PHPPrésentation de DBAL en PHP
Présentation de DBAL en PHP
 
Apprenez le jQuery
Apprenez le jQueryApprenez le jQuery
Apprenez le jQuery
 
Python avancé : Classe et objet
Python avancé : Classe et objetPython avancé : Classe et objet
Python avancé : Classe et objet
 
Javascript et JQuery
Javascript et JQueryJavascript et JQuery
Javascript et JQuery
 
Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...
Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...
Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...
 
1145709.ppt
1145709.ppt1145709.ppt
1145709.ppt
 
Héritage et redéfinition de méthode
Héritage et redéfinition de méthodeHéritage et redéfinition de méthode
Héritage et redéfinition de méthode
 
Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech days
 
Les bonnes pratiques de l'architecture en général
Les bonnes pratiques de l'architecture en généralLes bonnes pratiques de l'architecture en général
Les bonnes pratiques de l'architecture en général
 
Meet up symfony 11 octobre 2016 - Les formulaire
Meet up symfony 11 octobre 2016 - Les formulaireMeet up symfony 11 octobre 2016 - Les formulaire
Meet up symfony 11 octobre 2016 - Les formulaire
 
Optimisation et administration avancée d’Active Directory - Par Thierry Deman
Optimisation et administration avancée d’Active Directory - Par Thierry DemanOptimisation et administration avancée d’Active Directory - Par Thierry Deman
Optimisation et administration avancée d’Active Directory - Par Thierry Deman
 
Jquery : les bases
Jquery : les basesJquery : les bases
Jquery : les bases
 
Composition, agrégation et immuabilité
Composition, agrégation et immuabilitéComposition, agrégation et immuabilité
Composition, agrégation et immuabilité
 
programmation orienté objet c++
programmation orienté objet c++programmation orienté objet c++
programmation orienté objet c++
 
Présentation de DBAL en PHP (Nantes)
Présentation de DBAL en PHP (Nantes)Présentation de DBAL en PHP (Nantes)
Présentation de DBAL en PHP (Nantes)
 
Patterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptPatterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScript
 
Programmation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationProgrammation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulation
 

Plus de kohay75604

Chapitre1_Introduction_res_sans_fils_mobiles.pdf
Chapitre1_Introduction_res_sans_fils_mobiles.pdfChapitre1_Introduction_res_sans_fils_mobiles.pdf
Chapitre1_Introduction_res_sans_fils_mobiles.pdfkohay75604
 
catalogue PFE 2023.pdf
catalogue PFE 2023.pdfcatalogue PFE 2023.pdf
catalogue PFE 2023.pdfkohay75604
 
Chap 2 - Etudiant.pdf
Chap 2 - Etudiant.pdfChap 2 - Etudiant.pdf
Chap 2 - Etudiant.pdfkohay75604
 
Chap 1 - Etudiant.pdf
Chap 1 - Etudiant.pdfChap 1 - Etudiant.pdf
Chap 1 - Etudiant.pdfkohay75604
 
res_mobiles_ch4.pdf
res_mobiles_ch4.pdfres_mobiles_ch4.pdf
res_mobiles_ch4.pdfkohay75604
 
application SSL_TLS.pptx
application SSL_TLS.pptxapplication SSL_TLS.pptx
application SSL_TLS.pptxkohay75604
 
Inf_theory_lect2.pdf
Inf_theory_lect2.pdfInf_theory_lect2.pdf
Inf_theory_lect2.pdfkohay75604
 
Inf_theory_lect3.pdf
Inf_theory_lect3.pdfInf_theory_lect3.pdf
Inf_theory_lect3.pdfkohay75604
 
Inf_theory_lect4.pdf
Inf_theory_lect4.pdfInf_theory_lect4.pdf
Inf_theory_lect4.pdfkohay75604
 
Business Template with Transitions by Slidesgo.pptx
Business Template with Transitions by Slidesgo.pptxBusiness Template with Transitions by Slidesgo.pptx
Business Template with Transitions by Slidesgo.pptxkohay75604
 
S2-00-HTTP.pptx
S2-00-HTTP.pptxS2-00-HTTP.pptx
S2-00-HTTP.pptxkohay75604
 
S2-01-PHP.pptx
S2-01-PHP.pptxS2-01-PHP.pptx
S2-01-PHP.pptxkohay75604
 

Plus de kohay75604 (17)

crypto1.pdf
crypto1.pdfcrypto1.pdf
crypto1.pdf
 
Chapitre1_Introduction_res_sans_fils_mobiles.pdf
Chapitre1_Introduction_res_sans_fils_mobiles.pdfChapitre1_Introduction_res_sans_fils_mobiles.pdf
Chapitre1_Introduction_res_sans_fils_mobiles.pdf
 
catalogue PFE 2023.pdf
catalogue PFE 2023.pdfcatalogue PFE 2023.pdf
catalogue PFE 2023.pdf
 
Chap 3.pdf
Chap 3.pdfChap 3.pdf
Chap 3.pdf
 
Chap 2 - Etudiant.pdf
Chap 2 - Etudiant.pdfChap 2 - Etudiant.pdf
Chap 2 - Etudiant.pdf
 
Chap 1 - Etudiant.pdf
Chap 1 - Etudiant.pdfChap 1 - Etudiant.pdf
Chap 1 - Etudiant.pdf
 
res_mobiles_ch4.pdf
res_mobiles_ch4.pdfres_mobiles_ch4.pdf
res_mobiles_ch4.pdf
 
docker.pptx
docker.pptxdocker.pptx
docker.pptx
 
application SSL_TLS.pptx
application SSL_TLS.pptxapplication SSL_TLS.pptx
application SSL_TLS.pptx
 
SSL.TLS.pptx
SSL.TLS.pptxSSL.TLS.pptx
SSL.TLS.pptx
 
Inf_theory_lect2.pdf
Inf_theory_lect2.pdfInf_theory_lect2.pdf
Inf_theory_lect2.pdf
 
Inf_theory_lect3.pdf
Inf_theory_lect3.pdfInf_theory_lect3.pdf
Inf_theory_lect3.pdf
 
Inf_theory_lect4.pdf
Inf_theory_lect4.pdfInf_theory_lect4.pdf
Inf_theory_lect4.pdf
 
NFV.pdf
NFV.pdfNFV.pdf
NFV.pdf
 
Business Template with Transitions by Slidesgo.pptx
Business Template with Transitions by Slidesgo.pptxBusiness Template with Transitions by Slidesgo.pptx
Business Template with Transitions by Slidesgo.pptx
 
S2-00-HTTP.pptx
S2-00-HTTP.pptxS2-00-HTTP.pptx
S2-00-HTTP.pptx
 
S2-01-PHP.pptx
S2-01-PHP.pptxS2-01-PHP.pptx
S2-01-PHP.pptx
 

S2-02-PHP-objet.pptx

  • 2. RAPPELS DE DÉVELOPPEMENT OBJET 2 13:36:50 Programmation Web 2022-2023
  • 3. Développement objet  Définition de briques logicielles représentant un concept, une idée ou une entité ainsi que leurs interactions : les objets  Un objet est une structure de données comprenant également les fonctionnalités de traitement des données  L’objet est vu au travers de ses spécifications  Les concepts associés sont :  Encapsulation  Héritage  Polymorphisme 3 13:36:50 Programmation Web 2022-2023
  • 4. Classe  Une classe définit un modèle, un moule, à partir duquel tous les objets de la classe seront créés  La classe décrit les données internes ainsi que les fonctionnalités des objets  La classe est une vision « inerte », une recette de cuisine, visant à décrire la structure et le comportement des objets qui seront créés  La construction d’un objet à partir de la classe génératrice s’appelle instanciation  Les objets, entités « vivantes » en mémoire, sont des instances de la classe 4 13:36:50 Programmation Web 2022-2023
  • 5. Instanciation  La classe est une description « inerte »  Les objets doivent être instanciés à partir de la classe génératrice pour exister et devenir fonctionnels  Exemple : la classe Animal $bambi = new Animal(); $scrat = new Animal(); $melman = new Animal(); 5 13:36:50 Programmation Web 2022-2023
  • 6. Encapsulation  Procédé consistant à rassembler les données et les traitements au sein des objets  L’implémentation interne des objets est cachée  Les objets sont vus à travers leurs spécifications  Les données internes et les fonctionnalités possèdent un niveau de visibilité et peuvent éventuellement être masquées :  Public  Privé  Protégé 6 13:36:50 Programmation Web 2022-2023
  • 7. Encapsulation  Les données internes des objets sont appelées attributs (ou propriétés voire champs)  Les fonctionnalités des objets sont appelées méthodes  Méthodes habituelles :  Constructeur / destructeur  Accesseurs / modificateurs (getters / setters)  Référence à l’objet courant dans la description de la classe : $this 7 13:36:50 Programmation Web 2022-2023
  • 8. Visibilité  Publique : Les données internes et les méthodes sont accessibles par tous  Protégé : Les données internes et les méthodes sont accessibles aux objets dérivés  Privé : Les données internes et les méthodes ne sont accessibles qu’aux objets de la classe 8 13:36:50 Programmation Web 2022-2023
  • 9. Héritage ou dérivation ou extension  Création de nouvelles classes à partir du modèle d’une classe existante  La nouvelle classe possède tous les attributs et méthodes de la classe mère  La nouvelle classe peut proposer de nouveaux attributs et de nouvelles méthodes ou spécialiser des méthodes de la classe mère 9 13:36:50 Programmation Web 2022-2023 Impala Caribou Herbivore Guépard Léopard Carnivore Mammifère
  • 10. Polymorphisme  Choix dynamique de la méthode qui correspond au type réel de l’objet  Méthode eats()  function food(Mammifere $m) { return $m->eats(); }  $i = new Impala(); food($i);  $c = new Carnivore(); food($c); 10 13:36:50 Programmation Web 2022-2023 Impala herbe Caribou mousse Herbivore plantes Guépard impala Léopard impala Carnivore viande Mammifère nourriture herbe viande
  • 11. CLASSE, ATTRIBUTS ET MÉTHODES D’INSTANCE 11 13:36:50 Programmation Web 2022-2023
  • 12. Définition d'une classe class MyClass { private string $myData; public function __construct(string $param) { $this->myData = $param; } public function __destruct() { echo 'Destruction...’; } public function show(): void { echo 'my data : ' . $this->myData; } } 12 13:36:50 Programmation Web 2022-2023 Attribut privé Déclaration de classe Constructeur public Référence à l’instance courante Méthode publique Accès à un attribut Destructeur public
  • 13. Utilisation d'une classe <?php require 'myClass.php'; // Nouvel objet $object = new MyClass(12); // Utilisation d'une méthode $object->show(); $object->myData = 'coucou'; unset($o); 13 13:36:50 Programmation Web 2022-2023 Inclusion de la définition de la classe Création d'un objet Méthode affiche de l'objet $object L'attribut est privé Fatal error: Cannot access private property MyClass::$myData in dummy.php on line 25 class MyClass { private $myData; ... Destruction de l'objet $object Destruction... function __destruct() { echo 'Destruction...'; }
  • 14. Valeur par défaut des attributs class MyClass { private string $myData = 'Défaut'; public function set(string $value): void { $this->myData = $value; } public function show(): void { echo 'my data : '.$this->myData; } } $o = new MyClass(); $o->show(); $o->set('Nouvelle'); $o->show(); 14 13:36:50 Programmation Web 2022-2023 Attribut avec valeur par défaut Nouvel objet Affichage Affectation Affichage my data : Défaut my data : Nouvelle
  • 15. ATTRIBUTS ET MÉTHODES DE CLASSE 15 13:36:50 Programmation Web 2022-2023
  • 16. Attributs et méthodes de classe  Mot clé static  Attributs et méthodes utilisables sans instance de la classe (=attributs et méthode de classe)  Attributs NE peuvent PAS être accédés depuis une instance ($objet->attribut)  Attributs partagés par toutes les instances de la classe  Méthodes peuvent être accédés depuis une instance ($objet->methode() mais c’est mal !)  Dans les méthodes, $this n'est pas disponible 16 13:36:50 Programmation Web 2022-2023
  • 17. Attributs de classe (static) class MyClass { private static int $n = 0; public function __construct() { echo ++MyClass::$n .' instance(s)'; } public function __destruct() { echo 'destruction'; self::$n--; } } $s = new MyClass(); $t = new MyClass(); unset($t); $u = new MyClass(); $v = new MyClass(); echo MyClass::$n; 17 13:36:50 Programmation Web 2022-2023 Attribut privé statique : ne peut être accédé que par des méthodes de la classe Accès à l'attribut statique 1 instance(s) 2 instance(s) destruction 2 instance(s) 3 instance(s) Fatal error: Cannot access private property MyClass::$n in dummy.php on line 37
  • 18. Méthodes de classe (static) class MyClass { private static int $n = 0; public function __construct() { echo ++MyClass::$n." instance(s)n"; } public function __destruct() { MyClass::$n--; } public static function f(int $i): void { echo 'Dans f() : '.($i*$i); } } $s = new MyClass(); $s->f(2); MyClass::f(3); 18 13:36:50 Programmation Web 2022-2023 Méthode publique de classe Appel à partir d'une instance Toléré Appel sans instance 1 instance(s) Dans f() : 4 Dans f() : 9
  • 20. Constantes de classe class MyClass { public const MY_CONSTANT = 'Valeur'; public function show(): void { echo self::MY_CONSTANT; } } $c = new MyClass(); $c->show(); echo MyClass::MY_CONSTANT; 20 13:36:50 Programmation Web 2022-2023 Constante publique de classe (visibilité depuis PHP7.1) Accès à la constante de classe depuis la classe Accès à la constante de classe à l'extérieur de la classe Valeur Valeur
  • 22. Héritage 22 13:36:50 Programmation Web 2022-2023 class Simple { function show(): void { echo 'Je suis Simple'; } } class Extended extends Simple { function show(): void { parent::show(); echo ' mais aussi Extended'; } } $s = new Simple(); $e = new Extended(); $s->show(); $e->show(); Classe simple Une méthode publique Classe étendue héritant de la classe simple Surcharge de la méthode Appel de la méthode du parent Je suis Simple mais aussi Extended Je suis Simple
  • 23. AFFECTATION, CLONAGE, PASSAGE DE PARAMÈTRES 23 13:36:50 Programmation Web 2022-2023
  • 24. Assignation (affectation) d'objets class Point { private int $x; private int $y; public function __construct(int $x=0, int $y=0) { $this->x = $x; $this->y = $y; } public function set(int $x, int $y): void { $this->x = $x; $this->y = $y; } public function __toString(): string { return "({$this->x}, {$this->y})"; } } 24 13:36:50 Programmation Web 2022-2023
  • 25. Assignation (affectation) d'objets $segment = []; $point = new Point(); for ($i=10; $i<20; $i++) { $point->set($i, $i); $segment[] = $point; } foreach ($segment as $k => $p) echo "$k: {$p}n"; 25 13:36:50 Programmation Web 2022-2023 0: (19, 19) 1: (19, 19) 2: (19, 19) 3: (19, 19) 4: (19, 19) 5: (19, 19) 6: (19, 19) 7: (19, 19) 8: (19, 19) 9: (19, 19) $point 0,0 $segment 0 1 2 3 4 5 6 7 8 9 10,10 11,11 12,12 13,13 14,14 15,15 16,16 17,17 18,18 19,19
  • 26. Clonage d'objets $segment = []; $point = new Point(); for ($i=10; $i<20; $i++) { $point->set($i, $i); $segment[] = clone $point; } foreach ($segment as $k => $p) echo "$k: {$p}n"; 26 13:36:50 Programmation Web 2022-2023 0: (10, 10) 1: (11, 11) 2: (12, 12) 3: (13, 13) 4: (14, 14) 5: (15, 15) 6: (16, 16) 7: (17, 17) 8: (18, 18) 9: (19, 19) $point 0,0 $segment 0 1 2 3 4 5 6 7 8 9 10,10 11,11 12,12 13,13 14,14 15,15 16,16 17,17 18,18 19,19 10,10 11,11 12,12 13,13 14,14 15,15 16,16 17,17 18,18 19,19
  • 27. Objets comme arguments de fonctions function origin(Point $p): void { $p->set(0, 0); } $point = new Point(10, 10); echo "avant: {$point}n"; origin($point); echo "après: {$point}n"; 27 13:36:50 Programmation Web 2022-2023 avant: (10, 10) après: (0, 0) Passage de l'objet Point par référence
  • 28. ARGUMENTS / PARAMÈTRES NOMMÉS 28 13:36:50 Programmation Web 2022-2023
  • 29. Arguments / paramètres nommés class Point { private int $x; private int $y; public function __construct(int $x=0, int $y=0) { $this->x = $x; $this->y = $y; }  Passer un argument selon son nom et pas sa position  $point = new Point(0);  $point = new Point(y: 0); 29 13:36:50 Programmation Web 2022-2023
  • 30. OBJETS DANS LES CHAÎNES DE CARACTÈRES 30 13:36:50 Programmation Web 2022-2023
  • 31. Objets dans les chaînes de caractères  Problèmes :  ambiguïté  non évaluable  Chaîne contenant :  un attribut d'un objet dans une chaîne "a : $myObject->attribute"  le résultat d'une méthode d'un objet dans une chaîne "résultat : $myObject->compute()"  une entrée de tableau associatif  "valeur : $myArray['key']"  une variable suivie de texte (sans espace) "$amount contient $amuonteuros" 31 13:36:50 Programmation Web 2022-2023
  • 32. Objets dans les chaînes de caractères  Solution :  effectuer des concaténations (pénible)  délimiter par { }  Chaîne contenant :  un attribut d'un objet dans une chaîne "a : {$myObject->attribute}"  le résultat d'une méthode d'un objet dans une chaîne "résultat : {$myObject->compute()}"  une entrée de tableau associatif  "valeur : {$myArray['key']}"  une variable suivie de texte (sans espace) "$amount contient {$amount}euros" 32 13:36:50 Programmation Web 2022-2023
  • 34. Gestion des erreurs : exceptions  Gestion des exception identiques à C++/Java  Exception peut être :  Jetée : throw  Essayée : try  Capturée : catch  Exception jetée : code après throw non exécuté  Capture : 1 ou plusieurs blocs (selon type)  Exception non capturée : erreur fatale 34 13:36:50 Programmation Web 2022-2023
  • 35. Utilisation des exceptions try { $error = 'Toujours lancer cette erreur'; throw new Exception($error); /* Le code après une exception n'est jamais exécuté. */ echo 'Jamais exécuté'; } catch (Exception $exception) { echo "Capture Exception: " .$exception->getMessage()." n"; } // Poursuite de l'exécution echo 'Bonjour le monde'; 35 13:36:50 Programmation Web 2022-2023 Déroutement Essayer Lancer Capturer Capture Exception: Toujours lancer cette erreur Bonjour le monde
  • 36. Classe Exception PHP 8 <?php class Exception { protected string $message = ''; // message de l'exception protected int $code = 0; // code de l'exception protected string $file; // fichier source de l'exception protected int $line; // ligne de la source de l'exception public function __construct(string $message="", int $code=0); final public function getMessage(): string // message de l'exception final public function getCode(): mixed // code de l'exception final public function getFile(): string // nom du fichier source final public function getLine(): int // ligne du fichier source final public function getTrace(): array // un tableau de backtrace() final public function getTraceAsString(): string // chaîne de trace public function __toString(): string // chaîne pour l'affichage } 36 13:36:50 Programmation Web 2022-2023
  • 37. Catch multiple class Test { public function testing() { // ... throw new InvalidArgumentException(); // ... throw new RuntimeException(); // ... } } try { $foo = new Test; $foo->testing(); } catch (InvalidArgumentException | RuntimeException $exception) { var_dump(get_class($exception)); } 37 13:36:50 Programmation Web 2022-2023