Vous êtes sur la page 1sur 344

PHP : les fondamentaux

Achref El Mouelhi

Docteur de l’université d’Aix-Marseille


Chercheur en programmation par contrainte (IA)
Ingénieur en génie logiciel

elmouelhi.achref@gmail.com

H & H: Research and Training 1 / 218


Plan

1 Introduction

2 Avant de commencer

3 Premier projet PHP

4 Commentaires

5 Variables

6 Quelques opérations sur les variables

7 Fonctions utiles pour les chaı̂nes de caractères

H & H: Research and Training 2 / 218


Plan
8 Conditions et boucles
if
if ... else
if ... elseif ... else
switch
Elvis operator
Null coalescing
while
do ... while
for
9 Tableaux
Tableaux indexés
Tableaux associatifs
Tableaux multidimensionnels
10 Constantes
H & H: Research and Training 3 / 218
Plan

11 Fonctions
Fonctions nommées
Fonctions anonymes
Valeurs par défaut pour les paramètres
Fonctions à nombre indéterminé de paramètres
Décomposition
Passage par référence
Fonction de retour (callback)
Fonctions fléchées (Arrow functions)
Typage de paramètres
Typage de valeurs de retour
Typage strict
Type Nullable
Fonctions génératrices

H & H: Research and Training 4 / 218


Plan

12 Variables locales et globales

13 Math

14 Date

15 Fichiers
Ouverture
Fermeture
Utilisation

H & H: Research and Training 5 / 218


Introduction

PHP
PHP
Initialement pour Personal Home Page ensuite pour PHP :
Hypertext Preprocessor)
langage de programmation open-source
I c

ELH
orienté-objet et procédural
U
impératif
L MO
f E
hre
interprété

A c
faiblement typé
c
créé en 1994 par Rasmus Lerdorf dans le cadre d’un projet
personnel pour gérer les visiteurs de son site web
syntaxe très proche du C (procédural), C++ (procédural,
orienté-objet) et Java (orienté-objet)

H & H: Research and Training 6 / 218


Introduction

PHP

PHP, pourquoi ?

Langage de haut niveau (pas de gestion de mémoire, pas

c
d’allocation dynamique, pas de pointeur... comme en C et C++)
I
Facile à apprendre et à utiliser
EL H
U
L
Nombreuses documentations, supportsMO vidéos, plusieurs
exemples sur internet f E
c h re
c A é : un des langages les plus utilisés dans le
Énorme communaut
monde
Permettant de développer rapidement des programmes
portables : Windows, Mac OS, Linux...

H & H: Research and Training 7 / 218


Introduction

Quel type d’application ?


Applications utilisables en ligne de commande (scripting)
La partie serveur pour

applications web
I c

applications mobiles
ELH
U
sites web dynamiques
L MO
f E
hre
Services web
c
c A

H & H: Research and Training 8 / 218


Introduction

Quel type d’application ?


Applications utilisables en ligne de commande (scripting)
La partie serveur pour

applications web
I c

applications mobiles
ELH
U
sites web dynamiques
L MO
f E
hre
Services web
A c
c
Quelques technologies concurrentes à PHP

JSP (Java Server Pages) : contenu dynamique écrit en Java


ASP.Net (Active Server Pages) : contenu dynamique pouvant être
écrit dans tous les langages de la plateforme .Net (C#, VB.Net...)

H & H: Research and Training 8 / 218


Introduction

Dates de sorties de quelques versions de PHP

8 juin 1995 : Version 1.0.


1er novembre 1997 : Version 2.0.
6 juin 1998 : Version 3.0.
22 mai 2000 : Version 4.0.
10 décembre 2001 : Version 4.1.
I c

13 juillet 2004 : Version 5.0.
ELH
24 novembre 2005 : Version 5.1.
U
2 novembre 2006 : Version 5.2.
L MO
30 juin 2009 : Version 5.3.
f E
hre
1er mars 2012 : Version 5.4.
c
c A
20 juin 2013 : Version 5.5.

28 août 2014 : Version 5.6.
3 décembre 2015 : Version 7.0.
1 décembre 2016 : Version 7.1.
30 novembre 2017 : Version 7.2.
6 décembre 2018 : Version 7.3.
21 novembre 2019 : Version 7.4.

H & H: Research and Training 9 / 218


Introduction

PHP

Requête
Serveur
HTTP
Web HTTP
I c

(index.php) EL H
U
L MOindex.php
f E
c hre
c A
HTML
CSS + JS
Interpréteur
Réponse PHP Base de
HTTP données

Client Serveur

H & H: Research and Training 10 / 218


Introduction

PHP

De quoi on a besoin (le minimum) ?

Un éditeur de texte (Bloc-notes, Notepad++, Sublime Text...)


Un serveur web (Apache) I c
EL H
Un interpréteur du langage PHP
O U
L M
f E de gestion de base de données
Et probablement un système
r e
ch
(généralement MySQL)
A
c

H & H: Research and Training 11 / 218


Introduction

PHP

De quoi on a besoin (le minimum) ?

Un éditeur de texte (Bloc-notes, Notepad++, Sublime Text...)


Un serveur web (Apache) I c
EL H
Un interpréteur du langage PHP
O U
L M
f E de gestion de base de données
Et probablement un système
r e
ch
(généralement MySQL)
A
c
Sous Windows, on peut les trouver dans WAMP
http://www.wampserver.com/

H & H: Research and Training 11 / 218


Introduction

PHP
Première utilisation de WAMP

Démarrer WAMP

Cliquer sur WAMP dans la barre de démarrage et choisir Redémarrer les


services
I c

Si l’icône de WAMP n’est pas en vert, aller vérifier
ELH
U
MO
http://forum.wampserver.com/read.php?1,88043

fE L
c h r e
c A

H & H: Research and Training 12 / 218


Introduction

PHP
Première utilisation de WAMP

Démarrer WAMP

Cliquer sur WAMP dans la barre de démarrage et choisir Redémarrer les


services
I c

Si l’icône de WAMP n’est pas en vert, aller vérifier
ELH
U
MO
http://forum.wampserver.com/read.php?1,88043

L
fdeEdémarrage de WAMP
c h
Quelques éléments dans le r e
menu

localhost c A
: page de démarrage de WAMP
phpMyAdmin : page web permettant la gestion des bases de données MySQL

Répertoire www : emplacement des projets PHP sur le disque dur

...

H & H: Research and Training 12 / 218


Introduction

PHP

On peut utiliser un IDE (Environnement de développement intégré)

I
pour éviter d’utiliser la console et les commandes c
L H
é mE
car un IDE intègre un compilateur lancU
MO
ême pendant l’écriture
du code
L
f E syntaxique, l’auto-complétion,
r e
pour profiter de lahcoloration
c
l’indentationA
c automatique...
pour avoir une bonne structuration du projet

H & H: Research and Training 13 / 218


Introduction

PHP

Exemple d’IDE pour PHP


I c

Eclipse
ELH
U
Netbeans
L MO
WebStorm f E
chre
PHPStorm
c A

...

H & H: Research and Training 14 / 218


Introduction

PHP

Eclipse, pourquoi ?
I c

open-source
ELH
U
simple
L MO
f E
hre
conseillé pour les débutants
c
c A

multi-langage : Java, C++, PHP, Cobol, C#, JavaScript...

H & H: Research and Training 15 / 218


Introduction

Introduction

I c

Eclipse : téléchargement
ELH
OU
M
https://www.eclipse.org/downloads/download.php?file
L
h r e fE
=/oomph/epp/2019-12/R/eclipse-inst-win64.exe

A c
c

H & H: Research and Training 16 / 218


Introduction

PHP

I c

ELH
U
L MO
f E
chre
c A

H & H: Research and Training 17 / 218


Introduction

PHP

I c

ELH
U
L MO
f E
chre
c A

H & H: Research and Training 17 / 218


Introduction

PHP

Configuration d’Eclipse

I c
Au démarrage d’Eclipse, choisir le répertoire www de wamp64
comme workspace ELH
U
O encoding
Aller Window > Preferences,
L Msaisir
r e E que l’encodage utilisé est l’UTF-8
fsections
A c h
Vérifier dans toutes les

c
Valider en cliquant sur Apply and close

H & H: Research and Training 18 / 218


Avant de commencer

PHP

Les règles de nommage en PHP


Pour les classes : Le Pascal case
I c

E LH
Pour les méthodes, fonctions et variables : Le snake case
U
MOcase
Pour les noms de projets : Le Kebab
L
h r e fE
A c
c

H & H: Research and Training 19 / 218


Avant de commencer

PHP

Les règles de nommage en PHP


Pour les classes : Le Pascal case
I c

E LH
Pour les méthodes, fonctions et variables : Le snake case
U
MOcase
Pour les noms de projets : Le Kebab
L
h r e fE
A c
Remarque c
Certains anciens éléments PHP prédéfinis ne respectent pas ces
règles.

H & H: Research and Training 19 / 218


Avant de commencer

PHP

Le code PHP
I c
H
Les fichiers contenant un code PHP doivent avoir l’extension
EL
.php
U
L MOles deux balises suivantes
<?php ... ?> ref
E
Un bloc de code PHP est situé entre

A h
cest une page HTML qui contient une ou plusieurs
c
Une page PHP
balises PHP

H & H: Research and Training 20 / 218


Avant de commencer

PHP

Les instructions
I c

Chaque instruction se termine par ;
EL H
Il est possible d’écrire plusieurs M
U
O sur une même ligne
instructions
f
(mais ce n’est pas une bonne L
E pratique)
r e
ch le formatage et l’indentation du code avec le
Eclipse nous A facilite
c CTRL + Shift + F

raccourci

H & H: Research and Training 21 / 218


Premier projet PHP

PHP

Comment créer un projet sous Eclipse ?


Aller dans File > New > PHP Project
Remplir le champ Project name: avec premier-cours-php
I c

puis cliquer sur Next
ELH
U
Cliquer sur Finish
L MO
f E
chre
c A

H & H: Research and Training 22 / 218


Premier projet PHP

PHP

Comment créer un projet sous Eclipse ?


Aller dans File > New > PHP Project
Remplir le champ Project name: avec premier-cours-php
I c

puis cliquer sur Next
ELH
U
Cliquer sur Finish
L MO
f E
A chre
Remarque
c

Aller vérifier dans le répertoire www qu’un répertoire
premier-cours-php a été créé

H & H: Research and Training 22 / 218


Premier projet PHP

PHP

Comment créer un fichier PHP ?


I c

Faire clic droit sur le projet et aller dans New LH
E > PHP File
U
Dans File name, saisir index.php
L MOet cliquer sur Next >
Choisir New simple
h r e f Efile
PHP
Cliquer Ac
csur Finish

H & H: Research and Training 23 / 218


Premier projet PHP

PHP

Remplacer le contenu d’index.php par le suivant


<!DOCTYPE html>
<html>
I c

<head>
<meta charset="UTF-8"> ELH
U
<title>Première page PHP</title>
L MO
</head>
f E
<body>
chre
<?php
c A

echo "Hello world";
?>
</body>
</html>

H & H: Research and Training 24 / 218


Premier projet PHP

PHP

I c

Comment voir le résultat de cette page ?
E LH
U
MO
Faire clic droit sur le fichier index.php
L
Choisir Run > PHP e
h r f EApplication
Web
A c
c

H & H: Research and Training 25 / 218


Premier projet PHP

PHP

Fonctions d’affichage : echo et print

utilisables avec et sans parenthèses.

I c
echo n’a pas de valeur de retour.
H
EL paramètres
O U
echo sans parenthèse peut accepter plusieurs
séparés par des virgules. L M

h r e fE
A c
print retourne toujours 1, donc elle peut être utilisée dans des
c
expressions.
print n’accepte qu’un seul paramètre.
echo est légèrement plus rapide que print.

H & H: Research and Training 26 / 218


Commentaires

PHP
Les commentaires

Trois types de commentaires

I c

ELH
U
L MO
f E
chre
c A

H & H: Research and Training 27 / 218


Commentaires

PHP
Les commentaires

Trois types de commentaires

I c

Commentaire mono-ligne (C++-style, déconseillé)
H
ELligne
// ceci est un commentaire sur une seule
U
L MO
h r e fE
A c
c

H & H: Research and Training 27 / 218


Commentaires

PHP
Les commentaires

Trois types de commentaires

I
Commentaire mono-ligne (C++-style, déconseillé) c
// ceci est un commentaire sur une seule H
ELligne
U
MO comment)
Commentaire sur plusieurs lignesL(C-style
/* ceci est un
h r e fE
commentaire Ac
sur trois clignes */

H & H: Research and Training 27 / 218


Commentaires

PHP
Les commentaires

Trois types de commentaires

I
Commentaire mono-ligne (C++-style, déconseillé) c
// ceci est un commentaire sur une seule H
ELligne
U
MO comment)
Commentaire sur plusieurs lignesL(C-style
/* ceci est un
h r e fE
commentaire Ac
sur trois clignes */
Commentaire pour documentation
/**
@author Achref El Mouelhi
*/
H & H: Research and Training 27 / 218
Variables

PHP
Une variable ?

Un pointeur vers une zone mémoire

Permettant de stocker une ou plusieurs données


I c
Pouvant avoir plusieurs valeurs différentes dans LH
Eun programme
U
L MO
h r e fE
A c
c

H & H: Research and Training 28 / 218


Variables

PHP
Une variable ?

Un pointeur vers une zone mémoire

Permettant de stocker une ou plusieurs données


I c
Pouvant avoir plusieurs valeurs différentes dans LH
Eun programme
U
L MO
Particularité du langageh r
PHP e fE
A c
PHP est cun langage faiblement typé.

Les variables sont préfixées par un signe dollar ”$” suivi du nom de la
variable dont le premier caractère est soit une lettre soit un underscore.

Le nom est sensible à la casse.

H & H: Research and Training 28 / 218


Variables

PHP
Exemple 1
$x = 5;

I c

ELH
U
L MO
f E
chre
c A

H & H: Research and Training 29 / 218


Variables

PHP
Exemple 1
$x = 5;

Exemple 2 I c

ELH
$_x = 5; U
L MO
f E
chre
c A

H & H: Research and Training 29 / 218


Variables

PHP
Exemple 1
$x = 5;

Exemple 2 I c

ELH
$_x = 5; U
L MO
f E
Exemple 3
A c hre
c
= 5;
$ma_variable

H & H: Research and Training 29 / 218


Variables

PHP
Exemple 1
$x = 5;

Exemple 2 I c

ELH
$_x = 5; U
L MO
f E
Exemple 3
A c hre
c
= 5;
$ma_variable

Exemple 4
$_ma_variable = 5;
H & H: Research and Training 29 / 218
Variables

PHP

I c
Quatre types primitifs (scalaires) de variable selon la valeur affectée

int
ELH
U
string
L MO
f E
boolean
chre
c A

float (ou double)

H & H: Research and Training 30 / 218


Variables

PHP
Exemple avec integer
$var = 5;
echo "$var ", gettype($var), "<br>";
/* affiche 5 integer */

I c

ELH
U
L MO
f E
chre
c A

H & H: Research and Training 31 / 218


Variables

PHP
Exemple avec integer
$var = 5;
echo "$var ", gettype($var), "<br>";
/* affiche 5 integer */

I c

ELH
Exemple avec double U
$var = 5.5; L MO
f E
hre
echo "$var ", gettype($var), "<br>";
/* affiche 5.5 double */ c
c A

H & H: Research and Training 31 / 218


Variables

PHP
Exemple avec integer
$var = 5;
echo "$var ", gettype($var), "<br>";
/* affiche 5 integer */

I c

ELH
Exemple avec double U
$var = 5.5; L MO
f E
hre
echo "$var ", gettype($var), "<br>";
/* affiche 5.5 double */ c
c A

Exemple avec boolean
$var = TRUE;
echo "$var ", gettype($var), "<br>";
/* affiche 1 boolean */
H & H: Research and Training 31 / 218
Variables

PHP
Exemple avec string
$var = "hello";
echo "$var ", gettype($var), "<br>";
/* affiche hello string */

I c

ELH
U
L MO
f E
chre
c A

H & H: Research and Training 32 / 218


Variables

PHP
Exemple avec string
$var = "hello";
echo "$var ", gettype($var), "<br>";
/* affiche hello string */

I c

ELH
Un seul caractère est aussi de type string
OU
$var = "h";
L M
echo "$var ", gettype($var),
r e f E"<br>";
ch
/* affiche h string */

c A

H & H: Research and Training 32 / 218


Variables

PHP
Exemple avec string
$var = "hello";
echo "$var ", gettype($var), "<br>";
/* affiche hello string */

I c

ELH
Un seul caractère est aussi de type string
OU
$var = "h";
L M
echo "$var ", gettype($var),
r e f E"<br>";
ch
/* affiche h string */

c A
Pour afficher plusieurs informations sur une variable, on utilise var dump()
$var = "hello";
echo var_dump($var) ,"<br>";
/* affiche C:\wamp64\www\premier-cours-php\index.php:17:string
’hello’ (length=5)*/

H & H: Research and Training 32 / 218


Variables

PHP
Remarques

Pour vérifier un type, on peut utiliser la fonction is type($nom variable) :


type à remplacer par le type que l’on cherche à vérifier

Pour les booléens, il faut utiliser is bool($nom variable).


I c
Ces fonctions retournent 1 si le type de la valeur de laL H
E variable passée en
U
MO
paramètre est vérifié, elles ne retournent rien sinon.

fE L
c h r e
c A

H & H: Research and Training 33 / 218


Variables

PHP
Remarques

Pour vérifier un type, on peut utiliser la fonction is type($nom variable) :


type à remplacer par le type que l’on cherche à vérifier

Pour les booléens, il faut utiliser is bool($nom variable).


I c
Ces fonctions retournent 1 si le type de la valeur de laL H
E variable passée en
U
MO
paramètre est vérifié, elles ne retournent rien sinon.

fE L
c h r e
c A
Exemple avec is string()
$var = "hello";
echo is_string($var) ,"<br>";
/* affiche 1 */

echo is_bool($var) ,"<br>";


/* n’affiche rien */

H & H: Research and Training 33 / 218


Variables

PHP

Explication
I c

H
EL ”1” et FALSE
PHP convertit une valeur booléenne TRUE en la chaı̂ne
en ”” (la chaı̂ne vide), par conséquence OU
echo true affiche 1 f E
LM
c h re
c A
echo false
n’affiche rien

H & H: Research and Training 34 / 218


Variables

PHP
La fonction is numeric permet de vérifier si le contenu d’une variable est numérique

echo(is_numeric(2));
/* affiche 1 */

echo(is_numeric(2.5));
/* affiche 1 */
I c

ELH
echo(is_numeric("2"));
U
MO
/* affiche 1 */

echo(is_numeric("-2.5"));
f E L
/* affiche 1 */
chre
c A

echo(is_numeric(true));
/* n’affiche rien */

echo(is_numeric("2a"));
/* n’affiche rien */

echo(is_numeric("a"));
/* n’affiche rien */

H & H: Research and Training 35 / 218


Variables

PHP

Autres fonctions is *
is float()
I c
EL H
U
is real() (ou son alias is float())

L MO
ef E
is object()
is array() chr
c A pour tester si une variable est de type entier,
is scalar()
nombre décimal, chaı̂ne de caractères ou booléen.

H & H: Research and Training 36 / 218


Variables

PHP

I c

Utiliser une variable non-déclarée et non-initialisée ⇒ Undefined
variable
ELH
U
$x = $y + 1;
L MO
f E
echo $x;
chre
c A

H & H: Research and Training 37 / 218


Variables

PHP

La constante NULL peut-être utilisée pour créer une variable sans


l’initialiser. Cette dernière sera de type null
I c

$var = NULL;
ELH
U
echo $var;
L MO
f E
hre
/* n’affiche rien */
c
c A

echo gettype($var);
/* affiche NULL */

H & H: Research and Training 38 / 218


Variables

PHP
La fonction isset peut-être utilisée pour vérifier si une variable est déclarée et
est différente de NULL

$var = NULL;

echo isset($var);
I c

/* n’affiche rien */
ELH
U
$var = 2;
echo isset($var);
L MO
f E
hre
/* affiche 1 */
c
c A

H & H: Research and Training 39 / 218


Variables

PHP
La fonction isset peut-être utilisée pour vérifier si une variable est déclarée et
est différente de NULL

$var = NULL;

echo isset($var);
I c

/* n’affiche rien */
ELH
U
$var = 2;
echo isset($var);
L MO
f E
hre
/* affiche 1 */

A c
empty() vs c
isset() vs is null()

"" "wick" NULL false true 0


empty() true false true true false true
isset() true true false true true true
is null() false false true false false false

H & H: Research and Training 39 / 218


Variables

PHP

La fonction unset peut-être utilisée pour détruire la variable


passée en paramètre
I c

$var = 2;
ELH
echo isset($var); U
/* affiche 1 */
L MO
f E
unset($var); chre
echo isset($var); c A

/* n’affiche rien */

H & H: Research and Training 40 / 218


Variables

PHP

Différence entre ”guillemets” et ’apostrophes’ avec echo


I c

$var = 2;
ELH
echo "Contenu de ma variable : $var"
U
/* affiche Contenu de ma variable : 2 */
L MO
f E
revariable : $var’
echo ’Contenu dehma
c
c A de ma variable : $var
/* affiche Contenu */

H & H: Research and Training 41 / 218


Quelques opérations sur les variables

PHP

Opérateurs arithmétiques

= : affectation
I c

+ : addition
ELH
U
- : soustraction
L MO
f E
* : multiplication
c hre
c A

/ : division
% : reste de la division

** : exponentiel

H & H: Research and Training 42 / 218


Quelques opérations sur les variables

PHP

Quelques exemples avec l’addition


$x = 1;
$y = 3;
I c

$z = ’8’;
ELH
$t = "2"; U
$n = 2.5;
L MO
f E
hre
echo($x + $y ."<br>"); /* 4 */
echo($x + $z c
."<br>"); /* 9 */
echo($x +
echo($x +
c A
$t
$y
."<br>"); /* 3 */
+ $z ."<br>"); /* 12 */
echo($z + $y + $x ."<br>"); /* 12 */
echo($x + $n ."<br>"); /* 3.5 */

H & H: Research and Training 43 / 218


Quelques opérations sur les variables

PHP

Quelques raccourcis
$i++; ≡ $i = $i + 1;
I c

$i--; ≡ $i = $i - 1;
E LH
U
$i += 2; ≡ $i = $i + 2;
L MO
h r f E- 3;
$i -= 3; ≡ $i =e$i
$i *= 2; A
c
c
≡ $i = $i * 2;
$i /= 3; ≡ $i = $i / 3;
$i %= 5; ≡ $i = $i % 5;

H & H: Research and Training 44 / 218


Quelques opérations sur les variables

PHP

Exemple de post-incrémentation
$i = 2;
$j = $i++;
I c

echo($i); /* affiche 3 */
ELH
echo($j); /* affiche 2 */
U
L MO
f E
c hre
c A

H & H: Research and Training 45 / 218


Quelques opérations sur les variables

PHP

Exemple de post-incrémentation
$i = 2;
$j = $i++;
I c

echo($i); /* affiche 3 */
ELH
echo($j); /* affiche 2 */
U
L MO
re f E
c
Exemple de pre-incrh
émentation
$i = 2; c A
$j = ++$i;
echo($i); /* affiche 3 */
echo($j); /* affiche 3 */

H & H: Research and Training 45 / 218


Quelques opérations sur les variables

PHP

Pour permuter le contenu de deux variables, on peut utiliser la


décomposition
I c

$a = 2;
ELH
U
MO
$b = 0;
[$a, $b] = [$b, $a];
f E L
echo $a . " " . $b;
c hre
c A
/* affiche 0 2 */

H & H: Research and Training 46 / 218


Quelques opérations sur les variables

PHP

Pour permuter le contenu de deux variables, on peut utiliser la


décomposition
I c

$a = 2;
ELH
U
MO
$b = 0;
[$a, $b] = [$b, $a];
f E L
echo $a . " " . $b;
c hre
c A
/* affiche 0 2 */

H & H: Research and Training 46 / 218


Quelques opérations sur les variables

PHP

Étant données les deux variables suivantes


$heure = ’03:40:52’;
$seconds = 200; I c

ELH
U
L MO
f E
c hre
c A

H & H: Research and Training 47 / 218


Quelques opérations sur les variables

PHP

Étant données les deux variables suivantes


$heure = ’03:40:52’;
$seconds = 200; I c

ELH
U
L MO
f E
Exercice
c hre
c A

Écrire un script PHP qui permet d’ajouter le nombre de secondes
défini dans $seconds à l’heure définie dans la chaı̂ne de caractère
$heure.

H & H: Research and Training 47 / 218


Quelques opérations sur les variables

PHP

Correction
<?php
$heure = ’03:40:52’;
$secondes = 200;
I c

$h = substr($heure, 0, 2);
ELH
U
MO
$m = substr($heure, 3, 2);
$s = substr($heure, 6);
f E L
hre
$converted = $h * 3600 + $m * 60 + $s + $secondes;
c
$new_hours = (int) ($converted / 3600);
c A

$converted -= $new_hours * 3600;
$new_minutes = (int) ($converted / 60);
$new_seconds = $converted % 60;
echo "$new_hours:$new_minutes:$new_seconds";
?>

H & H: Research and Training 48 / 218


Fonctions utiles pour les chaı̂nes de caractères

PHP
L’opérateur . pour concaténer deux chaı̂nes de caractères
$string = "bon";
$string2 = "jour";
$str_concat = $string . $string2;
I c

echo $str_concat;
ELH
/* affiche bonjour */
U
L MO
f E
c hre
c A

H & H: Research and Training 49 / 218


Fonctions utiles pour les chaı̂nes de caractères

PHP
L’opérateur . pour concaténer deux chaı̂nes de caractères
$string = "bon";
$string2 = "jour";
$str_concat = $string . $string2;
I c

echo $str_concat;
ELH
/* affiche bonjour */
U
L MO
f E
c hre
L’opérateur .= permet de faire concaténation + affectation
A
$string c
= "bon";
$string2 = "jour";
$string .= $string2;
echo $string;
/* affiche bonjour */

H & H: Research and Training 49 / 218


Fonctions utiles pour les chaı̂nes de caractères

PHP
La fonction strcmp() pour comparer deux chaı̂nes de caractères

$string = "bon";
$string2 = "jour";

echo strcmp($string, $string2);


/* affiche -1 */
I c

echo strcmp($string2, $string);
ELH
U
MO
/* affiche 1 */

echo strcmp($string, $string);


f E L
hre
/* affiche 0 */
c
c A

H & H: Research and Training 50 / 218


Fonctions utiles pour les chaı̂nes de caractères

PHP
La fonction strcmp() pour comparer deux chaı̂nes de caractères

$string = "bon";
$string2 = "jour";

echo strcmp($string, $string2);


/* affiche -1 */
I c

echo strcmp($string2, $string);
ELH
U
MO
/* affiche 1 */

echo strcmp($string, $string);


f E L
hre
/* affiche 0 */
c
c A

Pour comparer deux chaı̂nes de caractères, on peut aussi utiliser l’opérateur ==

echo $string == $string;


/* affiche 1 */

echo $string == $string2;


/* n’affiche rien */

H & H: Research and Training 50 / 218


Fonctions utiles pour les chaı̂nes de caractères

PHP
Fonctions utiles pour les chaı̂nes de caractères

strlen() : la longueur de la chaı̂ne

strtoupper() : pour convertir une chaı̂ne de caractères en majuscule

I
strtolower() : pour convertir une chaı̂ne de caractères en minusculec

ELH
trim() : pour supprimer les espaces au début et à la fin (autres variantes : ltrim() et
U
MO
rtrim())

E L
substr() : pour extraire une sous-chaı̂ne de caractères
f
c hre
strpos() : pour retourner la position d’une sous-chaı̂ne dans une chaı̂ne, -1 sinon.

c A

strcmp($str,$str2) : pour comparer str à str2. Elle retourne 0 en cas d’égalité, 1
si le code ASCII du premier caractère différent de la première chaı̂ne est supérieur à celui
de la deuxième chaı̂ne, -1 sinon.

str split() : pour transformer une chaı̂ne de caractères en tableau de sous-chaı̂nes de


caractères

...

H & H: Research and Training 51 / 218


Fonctions utiles pour les chaı̂nes de caractères

PHP
Pour connaı̂tre la longueur d’une chaı̂ne
$str = "bonjour";
echo(strlen($str));
/* affiche 7 */
I c

ELH
U
L MO
f E
c hre
c A

H & H: Research and Training 52 / 218


Fonctions utiles pour les chaı̂nes de caractères

PHP
Pour connaı̂tre la longueur d’une chaı̂ne
$str = "bonjour";
echo(strlen($str));
/* affiche 7 */
I c
EL H
U
MOet à la fin de la chaı̂ne
Pour supprimer les espaces auLdébut

h r e fE
$str = " bon jour
A c ";
c
echo(strlen($str));
12 */
/* affiche

$sans_espace = trim($str);
echo(strlen($sans_espace));
/* affiche 8 */

H & H: Research and Training 52 / 218


Fonctions utiles pour les chaı̂nes de caractères

PHP
Pour extraire une sous-chaı̂ne à partir de l’indice 3 jusqu’à la fin

$str = "bonjour";
echo(substr($str, 3));
/* affiche jour */

I c

ELH
U
L MO
f E
c hre
c A

H & H: Research and Training 53 / 218


Fonctions utiles pour les chaı̂nes de caractères

PHP
Pour extraire une sous-chaı̂ne à partir de l’indice 3 jusqu’à la fin

$str = "bonjour";
echo(substr($str, 3));
/* affiche jour */

I c

ELH
On peut aussi préciser le nombre de caractère à extraire
U
$str = "bonjour";
L MO
f E
hre
echo(substr($str, 3, 2));
/* affiche jo */
c
c A

H & H: Research and Training 53 / 218


Fonctions utiles pour les chaı̂nes de caractères

PHP
Pour extraire une sous-chaı̂ne à partir de l’indice 3 jusqu’à la fin

$str = "bonjour";
echo(substr($str, 3));
/* affiche jour */

I c

ELH
On peut aussi préciser le nombre de caractère à extraire
U
$str = "bonjour";
L MO
f E
hre
echo(substr($str, 3, 2));
/* affiche jo */
c
c A

Pour extraire les trois derniers caractères, on utilise une valeur négative

$str = "bonjour";
echo(substr($str, -3)); /* eq substr($str, 4) avec 4 = length - 3 */
/* affiche our */

H & H: Research and Training 53 / 218


Fonctions utiles pour les chaı̂nes de caractères

PHP
Pour déterminer l’indice d’une sous-chaı̂ne dans une chaı̂ne de caractères
$str = "Bonjour les bons jours";
echo(strpos($str, "bon"));
/* affiche 12 */

I c

ELH
U
L MO
f E
c hre
c A

H & H: Research and Training 54 / 218


Fonctions utiles pour les chaı̂nes de caractères

PHP
Pour déterminer l’indice d’une sous-chaı̂ne dans une chaı̂ne de caractères
$str = "Bonjour les bons jours";
echo(strpos($str, "bon"));
/* affiche 12 */

I c

ELH
U
MO
Pour une recherche insensible à la casse

fE
$str = "Bonjour les bons jours"; L
/* affiche 0 */
c h r
echo(stripos($str, "bon"));
e
c A

H & H: Research and Training 54 / 218


Fonctions utiles pour les chaı̂nes de caractères

PHP
Pour déterminer l’indice d’une sous-chaı̂ne dans une chaı̂ne de caractères
$str = "Bonjour les bons jours";
echo(strpos($str, "bon"));
/* affiche 12 */

I c

ELH
U
MO
Pour une recherche insensible à la casse

fE
$str = "Bonjour les bons jours"; L
/* affiche 0 */
c h r
echo(stripos($str, "bon"));
e
c A
S’il n’y a aucune occurrence, elle ne retourne rien
$str = "Bonjour les bons jours";
echo(strpos($str, "soir"));
/* n’affiche rien */

H & H: Research and Training 54 / 218


Fonctions utiles pour les chaı̂nes de caractères

PHP

Pour déterminer la dernière occurrence d’une sous-chaı̂ne dans


une chaı̂ne de caractères
$str = "Bonjour les bons jours";
I c

echo(strrpos($str, "jour"));
ELH
/* affiche 17 */
U
L MO
f E
c hre
c A

H & H: Research and Training 55 / 218


Fonctions utiles pour les chaı̂nes de caractères

PHP

Pour déterminer la dernière occurrence d’une sous-chaı̂ne dans


une chaı̂ne de caractères
$str = "Bonjour les bons jours";
I c

echo(strrpos($str, "jour"));
ELH
/* affiche 17 */
U
L MO
f E
reère occurrence d’une sous-chaı̂ne dans
h
Pour déterminer lacderni
A ères (insensible à la casse)
cde caract
une chaı̂ne
$str = "Bonjour les bons jours";
echo(strripos($str, "bon"));
/* affiche 12 */

H & H: Research and Training 55 / 218


Fonctions utiles pour les chaı̂nes de caractères

PHP

Pour accéder à un caractère d’indice i dans une chaı̂ne de


caractères
// soit directement via l’indice I c

echo($str[i]);
ELH
U
L MO
f E
c hre
c A

H & H: Research and Training 56 / 218


Fonctions utiles pour les chaı̂nes de caractères

PHP

Pour accéder à un caractère d’indice i dans une chaı̂ne de


caractères
// soit directement via l’indice I c

echo($str[i]);
ELH
U
L MO
f E
Ou
A c hre
/* soit c
en faisant l’extraction d’une sous chaine de
caractères */
echo(substr($str, i, 1));

H & H: Research and Training 56 / 218


Fonctions utiles pour les chaı̂nes de caractères

PHP

Étant données les deux chaı̂nes de caractères suivantes


$ma_chaine = "Hello les holoulos";
$motif = "lo"; I c

ELH
U
L MO
f E
c hre
c A

H & H: Research and Training 57 / 218


Fonctions utiles pour les chaı̂nes de caractères

PHP

Étant données les deux chaı̂nes de caractères suivantes


$ma_chaine = "Hello les holoulos";
$motif = "lo"; I c

ELH
U
L MO
f E
Exercice
c hre
c A

En utilisant les fonctions sur les chaı̂nes de caractères, écrire un script
PHP qui permet de retourner la position de l’avant dernière occurrence
de $motif dans $ma chaine.

H & H: Research and Training 57 / 218


Fonctions utiles pour les chaı̂nes de caractères

PHP

Correction
<?php
I c

$ma_chaine = "Hello les holoulos";
ELH
U
MO
$motif = ’lo’;

f E L
$sans_dernier_motif = substr($ma_chaine, 0,

hre
strrpos($ma_chaine, $motif));
c
c A
echo "$sans_dernier_motif <br>";

?>

echo strrpos ($sans_dernier_motif, $motif);

H & H: Research and Training 58 / 218


Fonctions utiles pour les chaı̂nes de caractères

PHP

Étant données les deux chaı̂nes de caractères suivantes


$ma_chaine = "Hello les holoulos";
$motif = "lo"; I c

ELH
U
L MO
f E
c hre
c A

H & H: Research and Training 59 / 218


Fonctions utiles pour les chaı̂nes de caractères

PHP

Étant données les deux chaı̂nes de caractères suivantes


$ma_chaine = "Hello les holoulos";
$motif = "lo"; I c

ELH
U
L MO
f E
Exercice
c hre
c A

En utilisant les fonctions sur les chaı̂nes de caractères, écrire un script
PHP qui permet de supprimer l’avant dernière occurrence de $motif
dans $ma chaine.

H & H: Research and Training 59 / 218


Fonctions utiles pour les chaı̂nes de caractères

PHP

Correction

<?php
$ma_chaine = "Hello les holoulos";
I c

$motif = ’lo’;
ELH
$sans_dernier_motif = substr($ma_chaine, 0, strrpos($ma_chaine,
U
$motif));
L MO
f E
hre
$pos_avant_dernier = strrpos($sans_dernier_motif, $motif);
$avant = substr($ma_chaine, 0, $pos_avant_dernier);
c
c A
$apres = substr($ma_chaine, $pos_avant_dernier + strlen($motif));


$ma_chaine = $avant . $apres;
echo $ma_chaine;
?>

H & H: Research and Training 60 / 218


Fonctions utiles pour les chaı̂nes de caractères

PHP

La fonction nl2br permet de remplacer \n et \r par la balise


<br>
$bonjour = "bonjour \n john \n wick \n\r ou \r\n
Keanu Reeves" ;
I c

ELH
U
MO
echo nl2br($bonjour);

f E L
hre
/* le code source généré
c
c A
bonjour <br />
john <br />
wick <br />

ou <br />
Keanu Reeves
*/

H & H: Research and Training 61 / 218


Fonctions utiles pour les chaı̂nes de caractères

PHP

Pour convertir une chaı̂ne en entier (première solution avec le


cast)
$a = ’4’;
$b = (int)$a;
I c

echo $b . " " . gettype($b);
ELH
U
MO
/* affiche 4 integer */

f E L
c hre
c A

H & H: Research and Training 62 / 218


Fonctions utiles pour les chaı̂nes de caractères

PHP

Pour convertir une chaı̂ne en entier (première solution avec le


cast)
$a = ’4’;
$b = (int)$a;
I c

echo $b . " " . gettype($b);
ELH
U
MO
/* affiche 4 integer */

f E L
c hre
c A
Une deuxième solution avec la fonction intval()

$a = ’4’;
$b = intval($a);
echo $b . " " . gettype($b);
/* affiche 4 integer */

H & H: Research and Training 62 / 218


Fonctions utiles pour les chaı̂nes de caractères

Pour convertir une chaı̂ne en double (première solution avec le cast)

$a = ’4.5’;
$b = (float)$a;
echo $b . " " . gettype($b);
/* affiche 4.5 double */

I c

ELH
U
L MO
f E
c hre
c A

H & H: Research and Training 63 / 218


Fonctions utiles pour les chaı̂nes de caractères

Pour convertir une chaı̂ne en double (première solution avec le cast)

$a = ’4.5’;
$b = (float)$a;
echo $b . " " . gettype($b);
/* affiche 4.5 double */

I c

Pour faire le cast, on peut aussi utiliser (double)
ELH
U
MO
$a = ’4.5’;
$b = (double)$a;
echo $b . " " . gettype($b);
f E L
hre
/* affiche 4.5 double */
c
c A

H & H: Research and Training 63 / 218


Fonctions utiles pour les chaı̂nes de caractères

Pour convertir une chaı̂ne en double (première solution avec le cast)

$a = ’4.5’;
$b = (float)$a;
echo $b . " " . gettype($b);
/* affiche 4.5 double */

I c

Pour faire le cast, on peut aussi utiliser (double)
ELH
U
MO
$a = ’4.5’;
$b = (double)$a;
echo $b . " " . gettype($b);
f E L
hre
/* affiche 4.5 double */
c
c A

Une deuxième solution avec la fonction floatval() ou doubleval()

$a = ’4.5’;
$b = floatval($a);
echo $b . " " . gettype($b);
/* affiche 4 double */

H & H: Research and Training 63 / 218


Fonctions utiles pour les chaı̂nes de caractères

PHP

La fonction eval exécute une chaı̂ne de caractère passée en


I c

paramètre comme un script PHP
ELH
U
$str = "echo 2 * 3;";
L MO
eval($str);
f E
/* affiche 6 */
c hre
c A

H & H: Research and Training 64 / 218


Conditions et boucles if

PHP

Exécuter si une condition est vraie


I c

if (condition) {
ELH
U
MO
...
}
f E L
chre
c A

H & H: Research and Training 65 / 218


Conditions et boucles if

PHP

Exécuter si une condition est vraie


I c

if (condition) {
ELH
U
MO
...
}
f E L
A c hre
c
Pour les conditions, on utilise des opérateurs de comparaison

H & H: Research and Training 65 / 218


Conditions et boucles if

PHP

Opérateurs de comparaison

== : pour tester l’égalité des valeurs


!= : pour tester l’inégalité des valeurs I c
H
ELtypes
O U
=== : pour tester l’égalité des valeurs et des
!== : pour tester l’inégalitE L
é des
M
valeurs ou des types
> : supérieur àch
ref
c A
< : inférieur à
>= : supérieur ou égal à
<= : inférieur ou égal à

H & H: Research and Training 66 / 218


Conditions et boucles if

PHP

Exemple
I c

ELH
$x = 3;
U
if ($x >= 0) {
L MO
echo $x . " est positif";
f E
}
chre
c A

H & H: Research and Training 67 / 218


Conditions et boucles if ... else

PHP
Exécuter un premier bloc si une condition est vraie, un deuxième sinon (le bloc
else)

if (condition1) {
...
} else {
I c

...
ELH
}
U
L MO
f E
chre
c A

H & H: Research and Training 68 / 218


Conditions et boucles if ... else

PHP
Exécuter un premier bloc si une condition est vraie, un deuxième sinon (le bloc
else)

if (condition1) {
...
} else {
I c

...
ELH
}
U
L MO
f E
Exemple
chre
$x = 3; c A
if ($x > 0) {
echo $x . " est strictement positif";
} else {
echo $x . " est négatif ou nul";
}

H & H: Research and Training 68 / 218


Conditions et boucles if ... elseif ... else

PHP

On peut enchaı̂ner les conditions avec else if (et avoir un


troisième bloc voire ... un nième)
if (condition1) {
...
I c

} else if (condition2) {
ELH
U
...
L MO
}
f E
...
chre
c A
else {
...
}

H & H: Research and Training 69 / 218


Conditions et boucles if ... elseif ... else

PHP

On peut enchaı̂ner les conditions avec else if (et avoir un


troisième bloc voire ... un nième)
if (condition1) {
...
I c

} else if (condition2) {
ELH
U
...
L MO
}
f E
...
chre
c A
else {
...
}

On peut écrire elseif ou else if.

H & H: Research and Training 69 / 218


Conditions et boucles if ... elseif ... else

PHP

Exemple
$x = -3;
I c

if ($x > 0) {
EL H
echo $x . " U
est strictement positif";
} else if ($x < 0) {
L MO
echo $x . "
e fE
est strictement
h r négatif";
} else {
echo $x . " c
Ac
est nul";
}

H & H: Research and Training 70 / 218


Conditions et boucles if ... elseif ... else

PHP

I c

Exercice
E L H
U
O si une chaı̂ne de
Écrire un script PHP qui permet de déterminer
caractères $ma chaine est videL ou M
impair de caractères. ref
E si elle contient un nombre pair ou

A c h
c

H & H: Research and Training 71 / 218


Conditions et boucles if ... elseif ... else

PHP

Correction

<?php
$ma_chaine = "";
I c

$longueur = strlen($ma_chaine);
ELH
U
MO
if ($longueur == 0) {
echo "’$ma_chaine’ est vide";

f
} else if (0 == $longueur % 2) {
E L
hre
echo "’$ma_chaine’ a un nombre pair de carctères";
c
c A
} else {

}

echo "’$ma_chaine’ a un nombre impair de carctères";

?>

H & H: Research and Training 72 / 218


Conditions et boucles if ... elseif ... else

PHP

Étant données les deux chaı̂nes de caractères suivantes


$ma_chaine = "Hello les holoulos";
I c

$motif = "lo";
ELH
U
L MO
f E
chre
c A

H & H: Research and Training 73 / 218


Conditions et boucles if ... elseif ... else

PHP

Étant données les deux chaı̂nes de caractères suivantes


$ma_chaine = "Hello les holoulos";
I c

$motif = "lo";
ELH
U
L MO
f E
Exercice
A c hre
c
PHP qui permet de vérifier si une chaı̂ne de caractères
Écrire un script
$ma chaine contient deux occurrences de $motif.

H & H: Research and Training 73 / 218


Conditions et boucles if ... elseif ... else

PHP

Correction

<?php
I c

if (strrpos($ma_chaine, $motif) != strpos($ma_chaine, $motif)
) {
ELH
U
MO
echo "’$ma_chaine’ contient au moins deux occurences de ’
$motif’";
f E L
hre
} else {

c
echo "’$ma_chaine’ ne pas contient deux occurences de ’

}
$motif’";
c A

?>

H & H: Research and Training 74 / 218


Conditions et boucles if ... elseif ... else

PHP
Opérateurs logiques
&& ou and : et
|| ou or : ou
I c

! : non
ELH
U
xor : ou exclusif
L MO
f E
chre
c A

H & H: Research and Training 75 / 218


Conditions et boucles if ... elseif ... else

PHP
Opérateurs logiques
&& ou and : et
|| ou or : ou
I c

! : non
ELH
U
xor : ou exclusif
L MO
f E
A c hre
c
conditions (en utilisant des opérateurs logiques)
Tester plusieurs
if (condition1 && !condition2 || condition3) {
...
}
[else ...]

H & H: Research and Training 75 / 218


Conditions et boucles if ... elseif ... else

PHP

Étant données les deux variables suivantes


$x = 2;
I c

$y = 3;
ELH
U
L MO
f E
chre
c A

H & H: Research and Training 76 / 218


Conditions et boucles if ... elseif ... else

PHP

Étant données les deux variables suivantes


$x = 2;
I c

$y = 3;
ELH
U
L MO
f E
Exercice
A c hre
c
la somme, écrire un script PHP qui permet de
Sans calculer
déterminer si le résultat sera pair ou impair.

H & H: Research and Training 76 / 218


Conditions et boucles if ... elseif ... else

PHP
Première solution
<?php
if ($var1 % 2 != 0 xor $var2 % 2 != 0) {
echo "impair";
} else {
I c

}
echo "pair";
ELH
U
MO
?>

f E L
chre
c A

H & H: Research and Training 77 / 218


Conditions et boucles if ... elseif ... else

PHP
Première solution
<?php
if ($var1 % 2 != 0 xor $var2 % 2 != 0) {
echo "impair";
} else {
I c

}
echo "pair";
ELH
U
MO
?>

f E L
Deuxième solution
chre
<?php c A

if ($x % 2 == $y % 2) {
echo "le résultat est pair";
} else {
echo "le résultat est impair";
}
?>

H & H: Research and Training 77 / 218


Conditions et boucles switch

PHP
Structure conditionnelle switch : syntaxe
switch ($nom_ariable) {
case constante-1:
groupe-instructions-1;
I c

break;
ELH
case constante-2:
U
groupe-instructions-2;
L MO
break;
f E
...
chre
c A
case constante-N:

groupe-instructions-N;
break;
default:
groupe-instructions-par-défaut;
}

H & H: Research and Training 78 / 218


Conditions et boucles switch

PHP

Remarques

Le switch permet seulement de tester l’égalité I c


H
L un bloc case
Efois
Le break permet de quitter le switchU
MO
une
exécuté
L
f Eplusieurs case
Il est possible deh
c r e
regrouper
Le bloc c A
default est facultatif, il sera exécuter si la valeur de la
variable ne correspond à aucune constante de case

H & H: Research and Training 79 / 218


Conditions et boucles switch

PHP
Structure conditionnelle avec switch
$x = 5;
switch ($x) {
case 1:
I c

echo("un");
ELH
break;
U
case 2:
L MO
echo("deux");
f E
hre
break;
c
c A
case 3:

echo("trois");
break;
default:
echo("autre");
}

H & H: Research and Training 80 / 218


Conditions et boucles switch

PHP
Un multi-case pour un seul traitement
$x = 5;
switch ($x) {
case 1:
case 2:
I c

echo("un ou deux");
ELH
break;
U
case 3:
L MO
echo("trois");
f E
break;
chre
c A
case 4:
case 5:
echo("quatre ou cinq");
break;
default:
echo("autre");
}

H & H: Research and Training 81 / 218


Conditions et boucles switch

PHP
Si on supprime un break
$x = "2";
switch ($x) {
case "1":
I c

echo("un");
ELH
break;
U
case "2":
L MO
echo("deux");
f E
case "3":
chre
c A

echo("trois");
break;
default:
echo("autre");
}
/* affiche deuxtrois */

H & H: Research and Training 82 / 218


Conditions et boucles switch

PHP

I c
Exercice
ELH
U
MOle nombre de jours d’un
Écrire un script PHP qui permet d’afficher
L
mois selon son indice.
h r e fE
A c
c

H & H: Research and Training 83 / 218


Conditions et boucles switch

Correction
$indice_mois = 1;
switch ($indice_mois) {
case ’1’:
case ’3’:
case ’5’:
case ’7’:
case ’8’:
case ’10’:
I c

case ’12’:
ELH
echo 31;
U
break;
case ’4’:
L MO
f E
hre
case ’6’:
case ’9’:
c
c A
case ’11’:

echo 30;
break;
case ’2’:
echo ’28 ou 29’;
break;
default:
echo "erreur";
break;
}
H & H: Research and Training 84 / 218
Conditions et boucles Elvis operator

PHP

Simplifions l’écriture avec l’expression ternaire (Elvis operator)


$x = 2;
$type = ($x % 2 == 0) ? "pair" : "impair";
echo($type); I c

/* affiche pair */ ELH
U
L MO
f E
chre
c A

H & H: Research and Training 85 / 218


Conditions et boucles Elvis operator

PHP

Simplifions l’écriture avec l’expression ternaire (Elvis operator)


$x = 2;
$type = ($x % 2 == 0) ? "pair" : "impair";
echo($type); I c

/* affiche pair */ ELH
U
L MO
f E
re else sans if)
c h
La version simplifiée (sans
$x = 2; c A
$type = ($x % 2 != 0) ?: "pair";
echo($type);
/* affiche pair */

H & H: Research and Training 85 / 218


Conditions et boucles Null coalescing

PHP

Pour tester si une variable existe ou si elle a une valeur différente


de null, on peut utiliser Null coalescing (??)
I c

$result = $y ?? 5;
ELH
echo($result);
U
/* affiche 5 car $y n’existe pas */
L MO
f E
$x = null;
chre
$result = $x ?? 5;
echo($result);
c A

/* affiche 5 car $x a la valeur null*/

H & H: Research and Training 86 / 218


Conditions et boucles while

PHP

Boucle while : à chaque itération on teste si la condition est


vraie avant d’accéder aux traitements
I c

while (condition[s]) {
ELH
U
...
L MO
}
f E
chre
c A

H & H: Research and Training 87 / 218


Conditions et boucles while

PHP

Boucle while : à chaque itération on teste si la condition est


vraie avant d’accéder aux traitements
I c

while (condition[s]) {
ELH
U
...
L MO
}
f E
A c hre
c
boucles infinies, vérifier que la condition d’arrêt sera bien
Attention aux
atteinte après un certain nombre d’itérations.

H & H: Research and Training 87 / 218


Conditions et boucles while

PHP
Exemple
$i = 0;
while ($i < 5) {
echo $i, "<br>";
I c

$i++;
ELH
}
U
L MO
f E
chre
c A

H & H: Research and Training 88 / 218


Conditions et boucles while

PHP
Exemple
$i = 0;
while ($i < 5) {
echo $i, "<br>";
I c

$i++;
ELH
}
U
L MO
f E
chre
c A
Le résultat est
0
1
2
3
4

H & H: Research and Training 88 / 218


Conditions et boucles while

PHP

Étant donnée la chaı̂ne de caractères suivante


$ma_chaine = "hello les holoulos";
I c

ELH
U
L MO
f E
chre
c A

H & H: Research and Training 89 / 218


Conditions et boucles while

PHP

Étant donnée la chaı̂ne de caractères suivante


$ma_chaine = "hello les holoulos";
I c

ELH
U
L MO
Exercice f E
chre
c A
Écrire un script PHP qui permet de remplacer chaque caractère

d’indice impair de la chaine de caractère $ma chaine par son
équivalent en majuscule.

H & H: Research and Training 89 / 218


Conditions et boucles while

PHP

Correction
<?php
I c

$i = 0;
ELH
U
MO
while ($i < strlen($ma_chaine)) {

f E L
$ma_chaine[$i] = strtoupper($ma_chaine[$i]);

hre
$i += 2;
c
c A
}

?>

echo $ma_chaine;

H & H: Research and Training 90 / 218


Conditions et boucles do ... while

PHP

La Boucle do ... while exécute le bloc au moins une fois ensuite


elle vérifie la condition
I c

do { ELH
U
...
L MO
}
f E
while (condition[s]);
chre
c A

H & H: Research and Training 91 / 218


Conditions et boucles do ... while

PHP

La Boucle do ... while exécute le bloc au moins une fois ensuite


elle vérifie la condition
I c

do { ELH
U
...
L MO
}
f E
while (condition[s]);
A c hre
c
boucles infinies, vérifier que la condition d’arrêt sera bien
Attention aux
atteinte après un certain nombre d’itérations.

H & H: Research and Training 91 / 218


Conditions et boucles do ... while

PHP
Exemple
$i = 0;
do {
echo $i, "<br>";
I c

$i++;
ELH
} while ($i < 5);
U
L MO
f E
chre
c A

H & H: Research and Training 92 / 218


Conditions et boucles do ... while

PHP
Exemple
$i = 0;
do {
echo $i, "<br>";
I c

$i++;
ELH
} while ($i < 5);
U
L MO
f E
chre
c A
Le résultat est
0
1
2
3
4

H & H: Research and Training 92 / 218


Conditions et boucles do ... while

PHP

Étant donnée la chaı̂ne de caractères suivante


$ma_chaine = "hello les holoulos";
I c

ELH
U
L MO
f E
chre
c A

H & H: Research and Training 93 / 218


Conditions et boucles do ... while

PHP

Étant donnée la chaı̂ne de caractères suivante


$ma_chaine = "hello les holoulos";
I c

ELH
U
L MO
f E
Exercice
chre
c A

Écrire un script PHP qui permet de compter le nombre de voyelles
dans la chaine de caractère $ma chaine.

H & H: Research and Training 93 / 218


Conditions et boucles do ... while

PHP
Correction
<?php
$ma_chaine = "hello les holoulos";
$voyelles = "aeouiy";
I c

$nbr_voyelles = 0;
ELH
$i = 0;
U
do {
L MO
f E
if (strpos($voyelles, strtolower($ma_chaine[
$i])) !== false) {
chre
}
c A

$nbr_voyelles++;

$i++;
} while ($i < strlen($ma_chaine));
echo $nbr_voyelles;
?>

H & H: Research and Training 94 / 218


Conditions et boucles for

PHP

Boucle for
I c

for (initialisation; condition[s]; incrémentation) {
ELH
...
U
}
L MO
f E
chre
c A

H & H: Research and Training 95 / 218


Conditions et boucles for

PHP

Boucle for
I c

for (initialisation; condition[s]; incrémentation) {
ELH
...
U
}
L MO
f E
chre
c A

Attention aux boucles infinies si vous modifiez la valeur du compteur à
l’intérieur de la boucle.

H & H: Research and Training 95 / 218


Conditions et boucles for

PHP

Exemple
for ($i = 0; $i < 5; $i++) {
echo $i, "<br>";
I c

}
ELH
U
L MO
f E
chre
c A

H & H: Research and Training 96 / 218


Conditions et boucles for

PHP

Exemple
for ($i = 0; $i < 5; $i++) {
echo $i, "<br>";
I c

}
ELH
U
L MO
f E
hre
Le résultat est
c
0
1 c A

2
3
4

H & H: Research and Training 96 / 218


Conditions et boucles for

Exercice

Écrire un code PHP qui permet d’afficher les nombres pairs compris entre 0 et 10.

I c

ELH
U
L MO
f E
chre
c A

H & H: Research and Training 97 / 218


Conditions et boucles for

Exercice

Écrire un code PHP qui permet d’afficher les nombres pairs compris entre 0 et 10.

Première solution
I c

for ($i = 0; $i < 10; $i++) {
ELH
U
MO
if ($i % 2 == 0) {
echo $i, "<br>";
f E L
hre
}
}
c
c A

H & H: Research and Training 97 / 218


Conditions et boucles for

Exercice

Écrire un code PHP qui permet d’afficher les nombres pairs compris entre 0 et 10.

Première solution
I c

for ($i = 0; $i < 10; $i++) {
ELH
U
MO
if ($i % 2 == 0) {
echo $i, "<br>";
f E L
hre
}
}
c
c A

Deuxième solution

for ($i = 0; $i < 10; $i += 2) {


echo $i, "<br>";
}

H & H: Research and Training 97 / 218


Conditions et boucles for

PHP

Étant donnée la chaı̂ne de caractères suivante


$ma_chaine = "hello les holoulos. C’est toujours le
I c

confinement.";
ELH
U
L MO
f E
chre
c A

H & H: Research and Training 98 / 218


Conditions et boucles for

PHP

Étant donnée la chaı̂ne de caractères suivante


$ma_chaine = "hello les holoulos. C’est toujours le
I c

confinement.";
ELH
U
L MO
f E
Exercice
A c hre
c
PHP qui permet de compter le nombre de phrases et
Écrire un script
celui de mots de la chaine de caractère $ma chaine.

H & H: Research and Training 98 / 218


Conditions et boucles for

PHP
Correction
<?php
$ma_chaine = "hello les holoulos. C’est toujours
le confinement.";
I c

$nbr_phrases = 0;
ELH
$nbr_mots = 1;
U
for ($i=0; $i < strlen($ma_chaine); $i++) {
L MO
if($ma_chaine[$i]== " ")
f E
$nbr_mots ++;
chre
c A

if ($ma_chaine[$i] == ".")
$nbr_phrases++;
}
echo "#phrases = $nbr_phrases <br> #mots =
$nbr_mots";
?>

H & H: Research and Training 99 / 218


Conditions et boucles for

PHP

Étant donnée la variable suivante


$nombre = 5;
I c

ELH
U
L MO
f E
chre
c A

H & H: Research and Training 100 / 218


Conditions et boucles for

PHP

Étant donnée la variable suivante


$nombre = 5;
I c

ELH
U
L MO
f E
Exercice
chre
c A

Écrire un script PHP qui permet d’afficher les tables d’addition,
soustraction, multiplication et division de $nombre.

H & H: Research and Training 100 / 218


Conditions et boucles for

PHP
Correction

<body>
<div class=container>
<?php
for ($j = 0; $j < strlen($op); $j++) {
I c

echo "<div>";
ELH
U
MO
for ($i = 1; $i <= 10; $i++) {
$operation = $nombre . " " . $op[$j] . " " . $i
;
f E L
hre
echo "$operation = ";
c
c A
eval("echo $operation .’<br>’;");
}

echo "</div>";
}
?>
</div>
</body>

H & H: Research and Training 101 / 218


Tableaux

PHP

Trois types de tableaux


I c
H
ELériques
tableaux indexés : tableaux avec indices num
U
L
tableaux associatifs : tableaux MO
avec indices personnalisés
E
ref : tableaux contenant d’autres
c h
tableaux multidimensionnels
c A
tableaux

H & H: Research and Training 102 / 218


Tableaux Tableaux indexés

PHP
Pour créer un tableau indexées d’entiers
$nombres = array(
2,
5,
I c

8
ELH
);
U
L MO
f E
chre
c A

H & H: Research and Training 103 / 218


Tableaux Tableaux indexés

PHP
Pour créer un tableau indexées d’entiers
$nombres = array(
2,
5,
I c

8
ELH
);
U
L MO
f E
chre
c= [A
Ou aussi
$nombres
2,
5,
8
];

H & H: Research and Training 103 / 218


Tableaux Tableaux indexés

PHP

Pour connaı̂tre le nombre d’éléments d’un tableau


echo count($nombres);
I c

/* affiche 3 */
ELH
U
L MO
f E
chre
c A

H & H: Research and Training 104 / 218


Tableaux Tableaux indexés

PHP

Pour connaı̂tre le nombre d’éléments d’un tableau


echo count($nombres);
I c

/* affiche 3 */
ELH
U
L MO
f E
hre
Pour accéder à un élément du tableau, on utilise son indice
c
$nombres[1] = 6;
echo $nombres[1];
c A

/* affiche 6 */

H & H: Research and Training 104 / 218


Tableaux Tableaux indexés

PHP

Les éléments d’un tableau ne doivent pas forcément avoir des


indices consécutifs
$nombres[5] = 6;
I c

var_dump($nombres);
ELH
/* affiche U
L
C:\wamp64\www\premier-cours-php\index.php:11: MO
f E
hre
array (size=4)
0 => int 2 c
1 => int 5
2 => int 8
c A

5 => int 6
*/

H & H: Research and Training 105 / 218


Tableaux Tableaux indexés

PHP

Pour ajouter un nouvel élément au tableau tout en gardant la


succession des indices
$nombres[] = 6;
I c

var_dump($nombres);
ELH
/* affiche U
L
C:\wamp64\www\premier-cours-php\index.php:11: MO
f E
hre
array (size=4)
0 => int 2 c
1 => int 5
2 => int 8
c A

3 => int 6
*/

H & H: Research and Training 106 / 218


Tableaux Tableaux indexés

PHP

Pour mieux afficher un tableau, on peut utiliser la fonction


print r() I c

ELH
$nombres[5] = 6; U
print_r($nombres);
L MO
f E
hre
/* affiche
c
Array ([0] => 2[1] => 5[2] => 8[5] => 6 )
*/ c A

H & H: Research and Training 107 / 218


Tableaux Tableaux indexés

PHP

Pour parcourir un tableau, avec une boucle, élément par élément


for($i = 0; $i < count($nombres); $i++) {
echo $nombres[$i], "<br>"; I c

}
ELH
U
L MO
f E
chre
c A

H & H: Research and Training 108 / 218


Tableaux Tableaux indexés

PHP

Pour parcourir un tableau, avec une boucle, élément par élément


for($i = 0; $i < count($nombres); $i++) {
echo $nombres[$i], "<br>"; I c

}
ELH
U
L MO
e f E
rforeach
c h
On peut aussi utiliser
foreach c A as $value) {
($nombres
echo $value, "<br>";
}

H & H: Research and Training 108 / 218


Tableaux Tableaux indexés

PHP

Étant donné le tableau suivant


$voitures = [’peugeot’, ’ford’, ’fiat’, ’mercedes’,
I c

’seat’];
ELH
U
L MO
f E
chre
c A

H & H: Research and Training 109 / 218


Tableaux Tableaux indexés

PHP

Étant donné le tableau suivant


$voitures = [’peugeot’, ’ford’, ’fiat’, ’mercedes’,
I c

’seat’];
ELH
U
L MO
f E
Exercice
A c hre
c
PHP qui permet de calculer la somme des longueurs
Écrire un script
des chaı̂nes de caractères définies dans $voitures.

H & H: Research and Training 109 / 218


Tableaux Tableaux indexés

PHP

Correction
I c

ELH
$voitures = [’peugeot’, ’ford’, ’fiat’, ’mercedes’, ’seat’];
U
MO
$total_caracteres = 0;
foreach ($voitures as $value) {

f E L
$total_caracteres += strlen($value);
}
chre
c A
echo $total_caracteres;

H & H: Research and Training 110 / 218


Tableaux Tableaux indexés

PHP

Étant données les deux variables suivantes


$voiture = ’ford’;
$voitures = [’peugeot’, ’ford’, ’fiat’, ’mercedes’, I c

’seat’, ’ford’, ’fiat’, ’ford’]; ELH
U
L MO
f E
chre
c A

H & H: Research and Training 111 / 218


Tableaux Tableaux indexés

PHP

Étant données les deux variables suivantes


$voiture = ’ford’;
$voitures = [’peugeot’, ’ford’, ’fiat’, ’mercedes’, I c

’seat’, ’ford’, ’fiat’, ’ford’]; ELH
U
L MO
f E
chre
Exercice
c A

Écrire un script PHP qui permet de calculer nombre d’occurrence de
$voiture dans $voitures.

H & H: Research and Training 111 / 218


Tableaux Tableaux indexés

PHP
Première solution
$occurrence = 0;
foreach ($voitures as $value) {
if ($value == $voiture) {
$occurrence++;
I c

}
ELH
} U
echo $occurrence;
L MO
f E
chre
c A

H & H: Research and Training 112 / 218


Tableaux Tableaux indexés

PHP
Première solution
$occurrence = 0;
foreach ($voitures as $value) {
if ($value == $voiture) {
$occurrence++;
I c

}
ELH
} U
echo $occurrence;
L MO
f E
chre
Deuxième solutionc A

$occurrence = 0;
foreach ($voitures as $value) {
$occurrence += ($value == $voiture);
}
echo $occurrence;

H & H: Research and Training 112 / 218


Tableaux Tableaux indexés

PHP
Pour chercher un élément dans un tableau indexé
echo(array_search(8, $nombres));
/* affiche 2 */

I c

ELH
U
L MO
f E
chre
c A

H & H: Research and Training 113 / 218


Tableaux Tableaux indexés

PHP
Pour chercher un élément dans un tableau indexé
echo(array_search(8, $nombres));
/* affiche 2 */

I c

EL H
U
On peut aussi comparer des types différents

L MO
echo(array_search("8", $nombres));
/* affiche 2 */
h r e fE
A c
c

H & H: Research and Training 113 / 218


Tableaux Tableaux indexés

PHP
Pour chercher un élément dans un tableau indexé
echo(array_search(8, $nombres));
/* affiche 2 */

I c

EL H
U
On peut aussi comparer des types différents

L MO
echo(array_search("8", $nombres));
/* affiche 2 */
h r e fE
A c
c
Pour comparer les valeurs et les types, on ajoute un troisième
paramètre optionnel
echo(array_search("5", $nombres, true));
/* n’affiche rien */

H & H: Research and Training 113 / 218


Tableaux Tableaux indexés

PHP

La fonction in array() retourne un booléen


echo(in_array("8", $nombres));
/* affiche 1 */
I c

E LH
echo(in_array(145, $nombres));
U
/* n’affiche rien */
L MO
h r e fE
A c
c

H & H: Research and Training 114 / 218


Tableaux Tableaux indexés

PHP

La fonction in array() retourne un booléen


echo(in_array("8", $nombres));
/* affiche 1 */
I c
E L H
echo(in_array(145, $nombres));
U
/* n’affiche rien */
L MO
h r e fE
A cvaleurs et les types, on ajoute un troisième
c
Pour comparer les
paramètre optionnel
echo(in_array("8", $nombres, true));
/* n’affiche rien */

H & H: Research and Training 114 / 218


Tableaux Tableaux indexés

Quelques fonctions sur les tableaux indexés

range($min, $max : retourne un tableau de valeurs séquentielles comprises entre $min


et $max
array pop(tableau) : supprime le dernier élément d’un tableau

array push(tableau, $valeur1, $valeur2...) : ajoute $valeur1,


$valeur2... comme derniers éléments d’un tableau
I c

ELH
array sum(tableau) (respectivement array product(tableau)) : retourne la
U
MO
somme (resp. le produit) des éléments d’un tableau

E L
array reverse(tableau) : retourne les éléments d’un tableau dans le sens inverse
f
chre
array shuffle(tableau) : désordonne les éléments d’un tableau

c A

array unique(tableau) : supprime les doublons d’un tableau

sort(tableau) : trie les éléments d’un tableau dans le sens ascendant

rsort(tableau) : trie les éléments d’un tableau dans le sens descendant

...

H & H: Research and Training 115 / 218


Tableaux Tableaux indexés

PHP
Exemple avec splice
$sports = ["foot", "tennis", "basket", "volley"];
$new = ["rugby", "natation"];

I c

$tab = array_splice($sports, 2, 0, $new);
ELH
U
print_r($sports);
L MO
f E
/* affiche Array ([0] => foot[1] => tennis[2] =>
chre
rugby[3] => natation[4] => basket[5] => volley )
*/ c A

print_r($tab)
/* affiche Array ( ) */

H & H: Research and Training 116 / 218


Tableaux Tableaux indexés

PHP
Exemple avec splice
$sports = ["foot", "tennis", "basket", "volley"];
$new = ["rugby", "natation"];

I c

$tab = array_splice($sports, 2, 0, $new);
ELH
U
print_r($sports);
L MO
f E
/* affiche Array ([0] => foot[1] => tennis[2] =>
chre
rugby[3] => natation[4] => basket[5] => volley )
*/ c A

print_r($tab)
/* affiche Array ( ) */

Aucun élément supprimé car le troisième paramètre = 0


H & H: Research and Training 116 / 218
Tableaux Tableaux indexés

PHP

Exemple avec splice


$sports = ["foot", "tennis", "basket", "volley"];
$new = ["rugby", "natation"];
I c

$tab = array_splice($sports, 2, 1, $new);
ELH
U
print_r($sports); L MO
f E
hre
/* affiche Array ([0] => foot[1] => tennis[2] =>
c
c A
rugby[3] => natation[4] => volley ) */

print_r($tab);
/* affiche Array ([0] => basket ) */

H & H: Research and Training 117 / 218


Tableaux Tableaux indexés

PHP

Exemple avec splice


$sports = ["foot", "tennis", "basket", "volley"];
$new = ["rugby", "natation"];
I c

$tab = array_splice($sports, 2, 1, $new);
ELH
U
print_r($sports); L MO
f E
hre
/* affiche Array ([0] => foot[1] => tennis[2] =>
c
c A
rugby[3] => natation[4] => volley ) */

print_r($tab);
/* affiche Array ([0] => basket ) */

Un seul élément supprimé car le deuxième paramètre = 1

H & H: Research and Training 117 / 218


Tableaux Tableaux indexés

PHP

À ne pas confondre avec slice qui permet d’extraire un


sous-tableau sans modifier le tableau d’origine

c

$sports = ["foot", "tennis", "basket", "volley"];
I
EL H
$tab = array_slice($sports, 0, 2); U
L MO
print_r($sports);
h r e fE
A cvolley =>) *foot[1]
/* affiche Array ([0] => tennis[2] =>
c
basket[3] => /

print_r($tab);
/* affiche Array ([0] => foot[1] => tennis ) */

H & H: Research and Training 118 / 218


Tableaux Tableaux indexés

PHP

La fonction implode permet de transformer un tableau en chaı̂ne de caractères

$sports = ["foot", "tennis", "basket", "volley"];


$string = implode("-", $sports);

I c

echo $string;
/* affiche foot-tennis-basket-volley */
ELH
U
echo gettype($string);
L MO
/* affiche string */
f E
chre
c A

H & H: Research and Training 119 / 218


Tableaux Tableaux indexés

PHP

La fonction implode permet de transformer un tableau en chaı̂ne de caractères

$sports = ["foot", "tennis", "basket", "volley"];


$string = implode("-", $sports);

I c

echo $string;
/* affiche foot-tennis-basket-volley */
ELH
U
echo gettype($string);
L MO
/* affiche string */
f E
A c hre
c
La fonction explode permet de transformer une chaı̂ne de caractères en tableau

$string = "bonjour john wick";


print_r (explode(" ", $string));
/* affiche Array ([0] => bonjour[1] => john[2] => wick ) */

H & H: Research and Training 119 / 218


Tableaux Tableaux indexés

PHP

Pour transformer une chaı̂ne de caractères en tableau de


c

caractères, on utilise la fonction str split
I
$string = "bonjour john wick"; E L H
print_r(str_split($string)); O U
/* affiche Array ([0] E
M
=>Lb[1] => o[2] => n[3] => j
[4] => o[5] => r
c h ef => r[7] =>[8] => j[9] => o
u[6]

c =>A k =>
[10] => h[11]
=> c[16]
n[12] =>[13] => w[14] => i[15]
) */

H & H: Research and Training 120 / 218


Tableaux Tableaux associatifs

PHP
Pour créer un tableau associatif (ensemble clé ⇒ valeur)

$fcb = array(
"messi" => 10,
"umtiti" => 23,
"suarez" => 9
);
I c

ELH
U
L MO
f E
chre
c A

H & H: Research and Training 121 / 218


Tableaux Tableaux associatifs

PHP
Pour créer un tableau associatif (ensemble clé ⇒ valeur)

$fcb = array(
"messi" => 10,
"umtiti" => 23,
"suarez" => 9
);
I c

ELH
U
MO
Pour ajouter un nouvel élément

$fcb["rakitic"] = 4;
f E L
chre
c A

H & H: Research and Training 121 / 218


Tableaux Tableaux associatifs

PHP
Pour créer un tableau associatif (ensemble clé ⇒ valeur)

$fcb = array(
"messi" => 10,
"umtiti" => 23,
"suarez" => 9
);
I c

ELH
U
MO
Pour ajouter un nouvel élément

$fcb["rakitic"] = 4;
f E L
chre
var_dump($fcb);
c A
Pour afficher les éléments d’un tableau associatif

/* C:\wamp64\www\premier-cours-php\index.php:11:
array (size=4)
’messi’ => int 10
’umtiti’ => int 23
’suarez’ => int 9
’rakitic’ => int 4 */

H & H: Research and Training 121 / 218


Tableaux Tableaux associatifs

PHP

Pour parcourir un tableau associatif élément par élément


foreach ($fcb as $key => $value) {
echo $key, " => ", $value, "<br>"; I c

}
ELH
U
L MO
f E
chre
c A

H & H: Research and Training 122 / 218


Tableaux Tableaux associatifs

PHP

Pour parcourir un tableau associatif élément par élément


foreach ($fcb as $key => $value) {
echo $key, " => ", $value, "<br>"; I c

}
ELH
U
L MO
f E
Le résultat est
chre
c10 A
messi =>
umtiti => 23
suarez => 9

H & H: Research and Training 122 / 218


Tableaux Tableaux associatifs

PHP

On peut aussi faire


foreach (array_keys($fcb) as $key) {
echo $key, " => ", $fcb[$key], "<br>"; I c

}
ELH
U
L MO
f E
chre
c A

H & H: Research and Training 123 / 218


Tableaux Tableaux associatifs

PHP

On peut aussi faire


foreach (array_keys($fcb) as $key) {
echo $key, " => ", $fcb[$key], "<br>"; I c

}
ELH
U
L MO
re f E
c h
Le résultat est le même
messi => c10 A
umtiti => 23
suarez => 9

H & H: Research and Training 123 / 218


Tableaux Tableaux associatifs

PHP
Les clés (respectivement les valeurs) peuvent ne pas avoir les même
types
$mixte = array(
17 => 10,
"umtiti" => 23,
I c

"suarez" => 9
ELH
); U
$mixte[2] = true;
L MO
var_dump($mixte); re f E
A ch
/* affiche C:\wamp64\www\premier-cours-php\index.php:11:
c

array (size=4)
17 => int 10
’umtiti’ => int 23
’suarez’ => int 9
2 => boolean true
*/

H & H: Research and Training 124 / 218


Tableaux Tableaux associatifs

PHP

Quelques fonctions sur les tableaux associatifs

array key exists() : vérifie si une clé existe


I c
EL
array values() : retourne la liste des valeurs H
U
Ovaleurs et les valeurs en clés
M
array flip : transforme les clés en
L
f
ksort() : trie un tableau
r e Eassociatif selon les clés dans un ordre
croissant
A ch
c : trie un tableau associatif selon les clés dans un ordre
krsort()
décroissant
...

H & H: Research and Training 125 / 218


Tableaux Tableaux associatifs

PHP
Étant données les variables suivantes
$cle = "messi";
$valeur = 10;
$fcb = array(
I c

"messi" => 10,
ELH
"umtiti" => 23, U
"suarez" => 9
L MO
);
f E
chre
c A

H & H: Research and Training 126 / 218


Tableaux Tableaux associatifs

PHP
Étant données les variables suivantes
$cle = "messi";
$valeur = 10;
$fcb = array(
I c

"messi" => 10,
ELH
"umtiti" => 23, U
"suarez" => 9
L MO
);
f E
chre
c A

Exercice

Écrire un script PHP qui permet de vérifier si $valeur est associée à


$cle.

H & H: Research and Training 126 / 218


Tableaux Tableaux associatifs

PHP

I c
Correction
E L H
echo ($fcb[$cle] == $valeur) ? "$cleOU
L M est le numéro $valeur" : "
fE
$cle n’a pas le numéro $valeur";

c h r e
c A

H & H: Research and Training 127 / 218


Tableaux Tableaux associatifs

PHP
Étant données les variables suivantes

$valeur = 10;
$fcb = array(
"messi" => 10,
"umtiti" => 23,
I c

"suarez" => 9,
ELH
"rivaldo" => 9,
U
"maradona" => 10,
L MO
"figo" => 9
f E
hre
);
c
c A

H & H: Research and Training 128 / 218


Tableaux Tableaux associatifs

PHP
Étant données les variables suivantes

$valeur = 10;
$fcb = array(
"messi" => 10,
"umtiti" => 23,
I c

"suarez" => 9,
ELH
"rivaldo" => 9,
U
"maradona" => 10,
L MO
"figo" => 9
f E
hre
);
c
c A

Exercice

Écrire un script PHP qui permet de déterminer l’ensemble de clés associées à


$valeur.

H & H: Research and Training 128 / 218


Tableaux Tableaux associatifs

PHP

Correction

I c

$cles = [];
foreach ($fcb as $key => $value) { ELH
U
if ($valeur == $value) {
L MO
$cles[] = $key;
f E
}
chre
}
print_r($cles); c A

H & H: Research and Training 129 / 218


Tableaux Tableaux multidimensionnels

PHP
Pour créer un tableau multidimensionnel
$langages = array
(
array("html", "css"),
array("js", "ts"),
I c

array("php", "java", "csharp")
ELH
);
U
L MO
f E
chre
c A

H & H: Research and Training 130 / 218


Tableaux Tableaux multidimensionnels

PHP
Pour créer un tableau multidimensionnel
$langages = array
(
array("html", "css"),
array("js", "ts"),
I c

array("php", "java", "csharp")
ELH
);
U
L MO
f E
Pour accéder à un élément
chre
c A

echo($langages[2][0]);
/* affiche php */

H & H: Research and Training 130 / 218


Tableaux Tableaux multidimensionnels

PHP
Pour créer un tableau multidimensionnel
$langages = array
(
array("html", "css"),
array("js", "ts"),
I c

array("php", "java", "csharp")
ELH
);
U
L MO
f E
Pour accéder à un élément
chre
c A

echo($langages[2][0]);
/* affiche php */

Pour ajouter un élément


$langages[3] = array("c", "c++");

H & H: Research and Training 130 / 218


Tableaux Tableaux multidimensionnels

PHP

Étant données les variables suivantes

$valeur = 5;
$matrice = array(
array(2, 3, 5, 7),
I c

array(1, 2, 5, 9, 5),
ELH
array(4, 2, 9, 3, 1, 5)
U
);
L MO
f E
chre
c A

H & H: Research and Training 131 / 218


Tableaux Tableaux multidimensionnels

PHP

Étant données les variables suivantes

$valeur = 5;
$matrice = array(
array(2, 3, 5, 7),
I c

array(1, 2, 5, 9, 5),
ELH
array(4, 2, 9, 3, 1, 5)
U
);
L MO
f E
chre
Exercice c A

Écrire un script PHP qui permet de calculer le nombre d’occurrence de $valeur
dans $matrice par ligne.

H & H: Research and Training 131 / 218


Tableaux Tableaux multidimensionnels

PHP

Correction
$compteurs = [0, 0, 0];
I c

for ($i = 0; $i < count($matrice); $i++) {
ELH
foreach ($matrice[$i] as $value) {
U
if ($value == $valeur) {
L MO
$compteurs[$i]++;
f E
}
chre
}
}
c A

print_r($compteurs);

H & H: Research and Training 132 / 218


Tableaux Tableaux multidimensionnels

PHP

Étant données les variables suivantes

$valeur = 5;
$matrice = array(
array(2, 3, 5, 7),
I c

array(1, 2, 5, 9, 5),
ELH
array(4, 2, 9, 3, 1, 5)
U
);
L MO
f E
chre
c A

H & H: Research and Training 133 / 218


Tableaux Tableaux multidimensionnels

PHP

Étant données les variables suivantes

$valeur = 5;
$matrice = array(
array(2, 3, 5, 7),
I c

array(1, 2, 5, 9, 5),
ELH
array(4, 2, 9, 3, 1, 5)
U
);
L MO
f E
chre
Exercice c A

Écrire un script PHP qui permet de déterminer si $valeur est présente dans chaque
ligne de $matrice.

H & H: Research and Training 133 / 218


Tableaux Tableaux multidimensionnels

PHP

Correction
I c

$trouver = true;
ELH
U
for ($i = 0; $i < count($matrice) && $trouver; $i++) {
if (!in_array($valeur, $matrice[$i])) {
L MO
$trouver = false;
f E
}
chre
c A
}

print($trouver ? "oui" : "non");

H & H: Research and Training 134 / 218


Constantes

PHP
Une constante

un élément qui ne peut changer de valeur

I c

ELH
U
L MO
f E
chre
c A

H & H: Research and Training 135 / 218


Constantes

PHP
Une constante

un élément qui ne peut changer de valeur

I c
Pour déclarer une constante,
L H
Einsensibilité
Utilise la fonction define(nom constante, valeur,
O U à la
L M
casse) : le dernier paramètre est facultatif et sa valeur par défaut est false

re f E
c h
c A

H & H: Research and Training 135 / 218


Constantes

PHP
Une constante

un élément qui ne peut changer de valeur

I c
Pour déclarer une constante,
L H
Einsensibilité
Utilise la fonction define(nom constante, valeur,
O U à la
L M
casse) : le dernier paramètre est facultatif et sa valeur par défaut est false

re f E
c h
c A , les constantes sont toujours écrites en majuscules)
Exemple (Par convention

define(PI, 3.1415);

H & H: Research and Training 135 / 218


Constantes

PHP
Une constante

un élément qui ne peut changer de valeur

I c
Pour déclarer une constante,
L H
Einsensibilité
Utilise la fonction define(nom constante, valeur,
O U à la
L M
casse) : le dernier paramètre est facultatif et sa valeur par défaut est false

re f E
c h
c A , les constantes sont toujours écrites en majuscules)
Exemple (Par convention

define(PI, 3.1415);

L’instruction suivante ne peut être acceptée

PI = 5;

H & H: Research and Training 135 / 218


Constantes

PHP

I c
Remarques
E L H
Le nom d’une constante ne doit pasOU
L M contenir les caractères $ ni
r e
Depuis PHP 7, on peut E un tableau de constantes.
fdéclarer
A c h
c

H & H: Research and Training 136 / 218


Fonctions

PHP

Une fonction ?
Un bloc d’instructions pouvant être appelé plusieurs fois
Déclaration d’une fonction ; son exécution
I c

Appel d’une fonction ⇒ son exécution UE
LH
L MO
h r e fE
A c
c

H & H: Research and Training 137 / 218


Fonctions

PHP

Une fonction ?
Un bloc d’instructions pouvant être appelé plusieurs fois

I
Déclaration d’une fonction ; son exécutionc

Appel d’une fonction ⇒ son exécution UE
LH
L MO
h r e fE
A c PHP

Particularitécdu langage

Le nom d’une fonction n’est pas sensible à la casse


Depuis PHP 7, on peut typer les paramètres et la valeur de retour

H & H: Research and Training 137 / 218


Fonctions Fonctions nommées

PHP
Déclarer une fonction
function nom_fonction([les arguments])
{
les instructions de la fonction
}
I c

ELH
U
L MO
f E
chre
c A

H & H: Research and Training 138 / 218


Fonctions Fonctions nommées

PHP
Déclarer une fonction
function nom_fonction([les arguments])
{
les instructions de la fonction
}
I c

ELH
Exemple U
function somme($a, $b)
L MO
f E
hre
{
return $a + $b;
c
}
c A

H & H: Research and Training 138 / 218


Fonctions Fonctions nommées

PHP
Déclarer une fonction
function nom_fonction([les arguments])
{
les instructions de la fonction
}
I c

ELH
Exemple U
function somme($a, $b)
L MO
f E
hre
{
return $a + $b;
c
}
c A

Appeler une fonction
$resultat = somme (1, 3);
echo $resultat;
/* affiche 4 */

H & H: Research and Training 138 / 218


Fonctions Fonctions nommées

PHP

I c
Exercice
EL H
Écrire une fonction PHP qui permet Mde dO
U
éterminer si un nombre passé
f
en paramètre est premier. La E L
fonction retourne un booléen.
ch r e
c A

H & H: Research and Training 139 / 218


Fonctions Fonctions anonymes

PHP
Déclarer une fonction anonyme (appelée aussi closure ou fermeture)
$nom_variable = function ([les arguments])
{
les instructions de la fonction
}
I c

ELH
U
L MO
f E
chre
c A

H & H: Research and Training 140 / 218


Fonctions Fonctions anonymes

PHP
Déclarer une fonction anonyme (appelée aussi closure ou fermeture)
$nom_variable = function ([les arguments])
{
les instructions de la fonction
}
I c

ELH
Exemple U
$somme2 = function ($a, $b)
L MO
f E
hre
{
return $a + $b;
c
};
c A

H & H: Research and Training 140 / 218


Fonctions Fonctions anonymes

PHP
Déclarer une fonction anonyme (appelée aussi closure ou fermeture)
$nom_variable = function ([les arguments])
{
les instructions de la fonction
}
I c

ELH
Exemple U
$somme2 = function ($a, $b)
L MO
f E
hre
{
return $a + $b;
c
};
c A

Appeler une fonction anonyme
$resultat = $somme2 (1, 3);
echo $resultat;
/* affiche 4 */

H & H: Research and Training 140 / 218


Fonctions Valeurs par défaut pour les paramètres

Appeler la fonction somme sans passer de paramètres ⇒ erreur fatale

echo(somme());

I c

ELH
U
L MO
f E
chre
c A

H & H: Research and Training 141 / 218


Fonctions Valeurs par défaut pour les paramètres

Appeler la fonction somme sans passer de paramètres ⇒ erreur fatale

echo(somme());

Solution : affecter des valeurs par défaut aux paramètres

function somme($a = 0, $b = 0)
{
I c

return $a + $b;
ELH
}
U
L MO
f E
chre
c A

H & H: Research and Training 141 / 218


Fonctions Valeurs par défaut pour les paramètres

Appeler la fonction somme sans passer de paramètres ⇒ erreur fatale

echo(somme());

Solution : affecter des valeurs par défaut aux paramètres

function somme($a = 0, $b = 0)
{
I c

return $a + $b;
ELH
}
U
L MO
f E
hre
Ainsi, on peut appeler la fonction avec 0, 1 ou deux paramètres
c
echo somme ();
/* affiche 0 */ c A

echo somme (5);
/* affiche 5 */

echo somme (5, 3);


/* affiche 8 */

H & H: Research and Training 141 / 218


Fonctions Fonctions à nombre indéterminé de paramètres

Pour écrire une fonction qui accepte un nombre indéterminé de paramètres, on peut
utiliser les fonctions func get args() et func num args()
function somme ()
{
$arguments = func_get_args();
$result = 0;
for($i = 0; $i < func_num_args(); $i++) {
$result += $arguments[$i];
I c

}
return $result;
ELH
}
U
L MO
f E
chre
c A

H & H: Research and Training 142 / 218


Fonctions Fonctions à nombre indéterminé de paramètres

Pour écrire une fonction qui accepte un nombre indéterminé de paramètres, on peut
utiliser les fonctions func get args() et func num args()
function somme ()
{
$arguments = func_get_args();
$result = 0;
for($i = 0; $i < func_num_args(); $i++) {
$result += $arguments[$i];
I c

}
return $result;
ELH
}
U
Tous ces appels sont corrects
L MO
f E
hre
echo(somme(2, 3, 5));
/* affiche 10 */
c
echo(somme(2, 3));
/* affiche 5 */
c A

echo(somme(2, 3, 5, 7));
/* affiche 17 */

echo(somme(2));
/* affiche 2 */

H & H: Research and Training 142 / 218


Fonctions Fonctions à nombre indéterminé de paramètres

Depuis PHP 5.6, on peut aussi utiliser le concept de décomposition avec l’opérateur ...

function somme (...$arguments)


{
$result = 0;
for($i = 0; $i < count($arguments) ; $i++) {
$result += $arguments[$i];
}
return $result;
I c

}
ELH
U
L MO
f E
chre
c A

H & H: Research and Training 143 / 218


Fonctions Fonctions à nombre indéterminé de paramètres

Depuis PHP 5.6, on peut aussi utiliser le concept de décomposition avec l’opérateur ...

function somme (...$arguments)


{
$result = 0;
for($i = 0; $i < count($arguments) ; $i++) {
$result += $arguments[$i];
}
return $result;
I c

}
ELH
U
MO
Tous ces appels restent corrects

echo(somme(2, 3, 5));
f E L
hre
/* affiche 10 */
c
echo(somme(2, 3));
/* affiche 5 */ c A

echo(somme(2, 3, 5, 7));
/* affiche 17 */

echo(somme(2));
/* affiche 2 */

H & H: Research and Training 143 / 218


Fonctions Fonctions à nombre indéterminé de paramètres

PHP

Exercice

c

Écrire une fonction PHP qui permet de déterminer si le premier
I
ELH
paramètre est divisible par tous les autres paramètres. Le nombre de
U
paramètres est variable et la fonction retourne un booléen.
L MO
f E
chre
Exemple
c A

var_dump(est_divisible_par(10, 2, 3, 5));
var_dump(est_divisible_par(10, 2, 5));

H & H: Research and Training 144 / 218


Fonctions Fonctions à nombre indéterminé de paramètres

PHP

Correction
function est_divisible_par($nombre, ...$diviseurs)
I c

{
ELH
U
MO
foreach ($diviseurs as $diviseur) {
if ($nombre % $diviseur != 0)
f E L
hre
return false;
}
c
}
return true;
c A

H & H: Research and Training 145 / 218


Fonctions Décomposition

PHP

Depuis PHP 7.4, il est possible de décomposer un tableau avec


l’opérateur ...
$nombres = array(
I c

2,
ELH
5, U
8
L MO
f E
hre
);
c
c A

$tab = [0, 1, ...$nombres, 7];
print_r($tab);
// affiche Array ( [0] => 0 [1] => 1 [2] => 2 [3] =>
5 [4] => 8 [5] => 7 )

H & H: Research and Training 146 / 218


Fonctions Passage par référence

PHP

Exercice

Écrire une fonction qui permet de permuter le contenu de deux


c

variables (de type entier par exemple) passées en paramètre
I
ELH
U
L MO
f E
chre
c A

H & H: Research and Training 147 / 218


Fonctions Passage par référence

PHP

Exercice

Écrire une fonction qui permet de permuter le contenu de deux


c

variables (de type entier par exemple) passées en paramètre
I
ELH
U
L MO
E
Voici à quoi en pense la première fois
f
chre
c A
function permuter($a, $b)
{
$aux

= $a;
$a = $b;
$b = $aux;
}

H & H: Research and Training 147 / 218


Fonctions Passage par référence

PHP
En testant ce code, c’est la surprise

$x = 2;
$y = 3;
permuter($x, $y);
echo $x, " ", $y;
I c

/* affiche 2 3 */
ELH
U
L MO
f E
chre
c A

H & H: Research and Training 148 / 218


Fonctions Passage par référence

PHP
En testant ce code, c’est la surprise

$x = 2;
$y = 3;
permuter($x, $y);
echo $x, " ", $y;
I c
/* affiche 2 3 */
EL H
O U
L M
fE
Et pourtant, si on vérifie dans la fonction, les valeurs ont bien été permutées

function permuter($a,
c h r e
$b)
{
$aux = c
$a;
A
$a = $b;
$b = $aux;
echo $a, " ", $b;
/* affiche 3 2 */
}

H & H: Research and Training 148 / 218


Fonctions Passage par référence

PHP

Passage par valeur

Les fonctions, par définition, reçoivent une copie du contenu de la


variable
I c

ELH
Elles ne manipulent pas la case de mémoire de la variable
envoyée U
L MO
E
On appelle ce concept passage par valeur
f
chre
c A

H & H: Research and Training 149 / 218


Fonctions Passage par référence

PHP

Passage par valeur

Les fonctions, par définition, reçoivent une copie du contenu de la


variable
I c

ELH
Elles ne manipulent pas la case de mémoire de la variable
envoyée U
L MO
E
On appelle ce concept passage par valeur
f
chre
c A

Quelle solution ?
Passage par référence

H & H: Research and Training 149 / 218


Fonctions Passage par référence

PHP
Pour passer les paramètres par référence, on utilise &
function permuter(&$a, &$b)
{
$aux = $a;
$a = $b;
I c

$b = $aux;
ELH
U
}
L MO
f E
chre
c A

H & H: Research and Training 150 / 218


Fonctions Passage par référence

PHP
Pour passer les paramètres par référence, on utilise &
function permuter(&$a, &$b)
{
$aux = $a;
$a = $b;
I c

$b = $aux;
ELH
U
}
L MO
f E
A
Pour tester chre
$x = 2;
c

$y = 3;
permuter($x, $y);
echo $x, " ", $y;
/* affiche 3 2 */

H & H: Research and Training 150 / 218


Fonctions Fonction de retour (callback)

PHP
Fonction de retour (ou de rappel, en anglais callback)

fonction appelée comme un paramètre d’une deuxième fonction

très utilisée avec les fonctions asynchrones


I c

ELH
U
L MO
f E
chre
c A

H & H: Research and Training 151 / 218


Fonctions Fonction de retour (callback)

PHP
Fonction de retour (ou de rappel, en anglais callback)

fonction appelée comme un paramètre d’une deuxième fonction

I c
très utilisée avec les fonctions asynchrones

ELH
U
L MO
Considérons les deux fonctions suivantes
function somme($a, $b) ef
r E
c h
$a +A
{
return c
}
$b;

function produit($a, $b)


{
return $a * $b;
}

H & H: Research and Training 151 / 218


Fonctions Fonction de retour (callback)

PHP

Utilisons les fonctions précédentes comme callback d’une


fonction operation()
I c

E L
function operation($a, $b, $fonction) H
U
{
L MO
}
h r e fE
echo ($fonction($a, $b));

A
operation (3, c ’somme’);
5,
c
8 */
/* affiche

H & H: Research and Training 152 / 218


Fonctions Fonction de retour (callback)

PHP
On peut aussi utiliser la fonction is callable si un paramètre
correspond à une fonction de rappel
function operation($a, $b, $fonction)
{
I c

if (is_callable($fonction))
ELH
echo ($fonction($a, $b));
U
else
L MO
echo "erreur";
f E
}
A c hre
c
(3, 5, ’somme’);
operation
/* affiche 8 */

operation (3, 5, ’division’);


/* affiche erreur */

H & H: Research and Training 153 / 218


Fonctions Fonction de retour (callback)

PHP
On peut aussi exécuter la fonction callback en appelant la
fonction PHP call user func
function operation($a, $b, $fonction)
{
I c

if (is_callable($fonction))
ELH
echo call_user_func($fonction, $a, $b);
U
else
L MO
echo "erreur";
f E
}
A c hre
c
(3, 5, ’somme’);
operation
/* affiche 8 */

operation (3, 5, ’division’);


/* affiche erreur */

H & H: Research and Training 154 / 218


Fonctions Fonction de retour (callback)

PHP

Exercice
I c

ELH
Modifier la fonction opération pour qu’elle puisse accepter deux
U
fonctions callback ensuite retourner le résultat de la composition
des deux.
L MO
f E
Par exemple :
chre
c A
operation (2, 3 , 6, ’somme’, ’produit’) retourne

30 = (2 + 3) * 6

H & H: Research and Training 155 / 218


Fonctions Fonction de retour (callback)

PHP

I c

Quelques fonctions prédéfinies sur les tableaux utilisant les callback
array map(callback, tableau) UE
L H
MO
array filter(tableau,Lcallback)
h r e fE
A c
array reduce(tableau, callback, initial)
c

H & H: Research and Training 156 / 218


Fonctions Fonction de retour (callback)

PHP

Exemple avec array map


$nombres = array(
2,
5,
I c

8
ELH
U
MO
);

f E L
hre
function carre($x)
c
c A
{

}

return $x * $x;

print_r(array_map("carre", $nombres));
/* affiche Array ([0] => 4[1] => 25[2] => 64 ) */

H & H: Research and Training 157 / 218


Fonctions Fonction de retour (callback)

PHP

Exemple avec array filter


$nombres = array(
2,
5,
I c

8
ELH
U
MO
);

f E L
hre
function estPair($x)
c
c A
{

}

return $x % 2 == 0;

print_r(array_filter($nombres, "estPair"));
/* affiche Array ([0] => 2[2] => 8 ) */

H & H: Research and Training 158 / 218


Fonctions Fonction de retour (callback)

PHP

Exemple avec array reduce


$nombres = array(
2,
5,
I c

8
ELH
U
MO
);

f E L
hre
function somme($x, $y)
c
c A
{

}

return $x + $y;

print_r(array_reduce($nombres, "somme", 0));


/* affiche 15 */

H & H: Research and Training 159 / 218


Fonctions Fonctions fléchées (Arrow functions)

PHP

I c

Fonctions fléchées (Arrow functions)
ELH
U
Disponible depuis PHP 7.4
L MO
f E
hre
Utilisant le mot-clé fn et l’opérateur =>
c
c A

H & H: Research and Training 160 / 218


Fonctions Fonctions fléchées (Arrow functions)

PHP

Exemple avec array map


$nombres = array(
I c

2,
ELH
5,
U
8
L MO
);
f E
chre
c A

$tab = array_map(fn($elt) => $elt * $elt, $nombres);
print_r($tab);
/* affiche Array ([0] => 4[1] => 25[2] => 64 ) */

H & H: Research and Training 161 / 218


Fonctions Fonctions fléchées (Arrow functions)

PHP

Exemple avec array filter


$nombres = array(
2,
I c

5,
ELH
U
8
L MO
);
f E
chre
c A
$tab = array_filter($nombres, fn($elt) => $elt % 2
== 0);
print_r($tab);
/* affiche Array ([0] => 2[2] => 8 ) */

H & H: Research and Training 162 / 218


Fonctions Fonctions fléchées (Arrow functions)

PHP

Exemple avec array reduce


$nombres = array(
2,
I c

5,
ELH
U
8
L MO
);
f E
chre
c A
$tab = array_reduce($nombres, fn ($elt, $res) =>

$elt + $res, 0);
print_r($tab);
/* affiche 15 */

H & H: Research and Training 163 / 218


Fonctions Typage de paramètres

PHP

Typage de paramètres
Disponible depuis PHP 7

c

Permettant de filtrer les valeurs pour éviter à nos fonctions un
I
comportement indésirable
ELH
U
L MO
f E
chre
c A

H & H: Research and Training 164 / 218


Fonctions Typage de paramètres

PHP

Typage de paramètres
Disponible depuis PHP 7

c

Permettant de filtrer les valeurs pour éviter à nos fonctions un
I
comportement indésirable
ELH
U
L MO
f E
Syntaxe
A c hre
c
function
nom_fonction([{type_variable $nom_variable
}])
{
// les instructions
}

H & H: Research and Training 164 / 218


Fonctions Typage de paramètres

PHP

Exemple
function somme(int $a, int $b)
{
I c

return $a + $b;
ELH
}
U
L MO
f E
chre
c A

H & H: Research and Training 165 / 218


Fonctions Typage de paramètres

PHP

Exemple
function somme(int $a, int $b)
{
I c

return $a + $b;
ELH
}
U
L MO
f E
A c
Appeler une fonction hre
c
= somme (1, 3);
$resultat
console.log($resultat);
/* affiche 4 */

H & H: Research and Training 165 / 218


Fonctions Typage de valeurs de retour

PHP

Typage de valeurs de retour


Disponible depuis PHP 7

I c

Permettant de déterminer le type de la variable recevant la valeur
de retour d’une fonction
ELH
U
L MO
f E
chre
c A

H & H: Research and Training 166 / 218


Fonctions Typage de valeurs de retour

PHP

Typage de valeurs de retour


Disponible depuis PHP 7

I c

Permettant de déterminer le type de la variable recevant la valeur
de retour d’une fonction
ELH
U
L MO
f E
Syntaxe A c hre
c
function nom_fonction([les paramètres]): type
{
// les instructions
}

H & H: Research and Training 166 / 218


Fonctions Typage de valeurs de retour

PHP

Exemple
function somme(int $a, int $b): int
{
I c

return $a + $b;
ELH
}
U
L MO
f E
chre
c A

H & H: Research and Training 167 / 218


Fonctions Typage de valeurs de retour

PHP

Exemple
function somme(int $a, int $b): int
{
I c

return $a + $b;
ELH
}
U
L MO
f E
A c
L’appel ne change pas hre
c
= somme (1, 3);
$resultat
console.log($resultat);
/* affiche 4 */

H & H: Research and Training 167 / 218


Fonctions Typage de valeurs de retour

PHP
Types valides pour les fonctions

int

string

I c

boolean
ELH
U
MO
float

array
f E L
A c hre
object (à voir dans un prochain chapitre)
c
: paramètre itérable avec une structure itérative (for, foreach...)
iterable

callable : fonction callback

void : comme valeur de retour indique que la fonction n’a pas de valeur de
retour, et comme paramètre indique que la fonction n’accepte pas de paramètre.

H & H: Research and Training 168 / 218


Fonctions Typage strict

PHP

Considérons la fonction somme suivante


function somme(int $a, int $b): int
{
I c

return $a + $b;
ELH
}
U
L MO
f E
chre
c A

H & H: Research and Training 169 / 218


Fonctions Typage strict

PHP

Considérons la fonction somme suivante


function somme(int $a, int $b): int
{
I c

return $a + $b;
ELH
}
U
L MO
f E
chre
c A
Comme le montre l’exemple suivant, PHP essayera de convertir

les valeurs s’ils ne sont pas de type entier
echo somme("1", 2.5);
/* affiche 3 */

H & H: Research and Training 169 / 218


Fonctions Typage strict

Question

Comment interdire l’exécution de la fonction si les types de valeurs ne correspondent pas aux
types des paramètres de la fonction.

I c

ELH
U
L MO
f E
chre
c A

H & H: Research and Training 170 / 218


Fonctions Typage strict

Question

Comment interdire l’exécution de la fonction si les types de valeurs ne correspondent pas aux
types des paramètres de la fonction.

Solution
I c

ELH
Utiliser le mode strict.
U
L MO
f E
chre
c A

H & H: Research and Training 170 / 218


Fonctions Typage strict

Question

Comment interdire l’exécution de la fonction si les types de valeurs ne correspondent pas aux
types des paramètres de la fonction.

Solution
I c

ELH
Utiliser le mode strict.
U
L MO
f E
hre
Déclarer le mode strict au tout début du fichier

c
c A
<?php

declare(strict_types=1);
?>

H & H: Research and Training 170 / 218


Fonctions Typage strict

Question

Comment interdire l’exécution de la fonction si les types de valeurs ne correspondent pas aux
types des paramètres de la fonction.

Solution
I c

ELH
Utiliser le mode strict.
U
L MO
f E
hre
Déclarer le mode strict au tout début du fichier

c
c A
<?php

declare(strict_types=1);
?>

Appeler une fonction avec des paramètres qui ne sont pas entiers implique désormais
une erreur fatale

echo somme("php", 2.5);

H & H: Research and Training 170 / 218


Fonctions Type Nullable

PHP
Considérons la fonction dire bonjour suivante

function dire_bonjour(string $nom): void


{
if ($nom != null) {
echo "bonjour $nom";
} else {
I c

}
echo "bonjour doe";

ELH
}
U
L MO
f E
chre
c A

H & H: Research and Training 171 / 218


Fonctions Type Nullable

PHP
Considérons la fonction dire bonjour suivante

function dire_bonjour(string $nom): void


{
if ($nom != null) {
echo "bonjour $nom";
} else {
I c

}
echo "bonjour doe";

ELH
}
U
L MO
f E
hre
Appeler cette fonction avec une valeur NULL implique une erreur fatale
c
c A

dire_bonjour(null);

H & H: Research and Training 171 / 218


Fonctions Type Nullable

PHP
Considérons la fonction dire bonjour suivante

function dire_bonjour(string $nom): void


{
if ($nom != null) {
echo "bonjour $nom";
} else {
I c

}
echo "bonjour doe";

ELH
}
U
L MO
f E
hre
Appeler cette fonction avec une valeur NULL implique une erreur fatale
c
c A

dire_bonjour(null);

Explication

Les types null et string sont incompatibles.

H & H: Research and Training 171 / 218


Fonctions Type Nullable

PHP

Question
I c

ELH
Comment autoriser la valeur null pour les autres types ?
U
L MO
f E
chre
c A

H & H: Research and Training 172 / 218


Fonctions Type Nullable

PHP

Question
I c

ELH
Comment autoriser la valeur null pour les autres types ?
U
L MO
f E
Solution
A c hre
c
En utilisant
l’opérateur ? pour rendre un type nullable

H & H: Research and Training 172 / 218


Fonctions Type Nullable

PHP
Modifions la fonction dire bonjour
function dire_bonjour(?string $nom): void
{
if ($nom != null) {
echo "bonjour $nom"; I c

} else {
ELH
U
MO
echo "bonjour doe";
}
f E L
hre
}
c
c A

H & H: Research and Training 173 / 218


Fonctions Type Nullable

PHP
Modifions la fonction dire bonjour
function dire_bonjour(?string $nom): void
{
if ($nom != null) {
echo "bonjour $nom"; I c

} else {
ELH
U
MO
echo "bonjour doe";
}
f E L
hre
}
c
c A

Appeler dire bonjour avec un paramètre NULL n’implique plus une
erreur fatale
dire_bonjour(null);
/* affiche bonjour doe*/

H & H: Research and Training 173 / 218


Fonctions Fonctions génératrices

PHP
Fonction génératrice

une fonction PHP

c

contenant un générateur yield qui retourne autant de valeurs que
I
nécessaire
ELH
U
L MO
f E
chre
c A

H & H: Research and Training 174 / 218


Fonctions Fonctions génératrices

PHP
Fonction génératrice

une fonction PHP

c

contenant un générateur yield qui retourne autant de valeurs que
I
nécessaire
ELH
U
L MO
f E
A
différent < 10c hre
Exemple d’une fonction qui retourne, à chaque appel, un nombre pair

c
function
generateur_pair(int $seuil)
{
for ($i = 0; $i <= $seuil; $i += 2) {
yield $i;
}
}

H & H: Research and Training 174 / 218


Fonctions Fonctions génératrices

PHP

Pour appeler la fonction


I c

E H
L {
foreach (generateur_pair(10) as $value)
U
echo "$value ";
L MO
}
/* affiche 0 2 4 6re
E
8 f10 */
A c h
c

H & H: Research and Training 175 / 218


Fonctions Fonctions génératrices

Une fonction génératrice peut retourner aussi un couple (clé, valeur)

function carre(int $seuil) {


for ($i = 0; $i <= $seuil; $i++)
{
yield $i => $i * $i;
}
}

I c

ELH
U
L MO
f E
chre
c A

H & H: Research and Training 176 / 218


Fonctions Fonctions génératrices

Une fonction génératrice peut retourner aussi un couple (clé, valeur)

function carre(int $seuil) {


for ($i = 0; $i <= $seuil; $i++)
{
yield $i => $i * $i;
}
}

I c

ELH
Pour appeler la fonction
U
foreach (carre(5) as $key => $value) {
L MO
f E
echo "le carré de $key est $value<br>";
}
c hre
/*
le
affiche
carré de c A
0 est 0
le carré de 1 est 1
le carré de 2 est 4
le carré de 3 est 9
le carré de 4 est 16
le carré de 5 est 25
*/

H & H: Research and Training 176 / 218


Fonctions Fonctions génératrices

PHP

Étant donnée la chaı̂ne de caractères suivante


$ma_chaine = "Hello les holoulos";
I c

ELH
U
L MO
f E
Exercice
chre
c A

Écrire une fonction génératrice qui retourne chaque fois une voyelle de
la chaı̂ne $ma chaine et sa position.

H & H: Research and Training 177 / 218


Fonctions Fonctions génératrices

PHP

Correction
function detecteur_voyelle(string $str)
{
I c

$voyelles = "aeouiy";
ELH
for ($i = 0; $i < strlen($str); $i++) {
U
MO
if (strpos($voyelles, $str[$i]) !== false)
L
yield $i => $str[$i];
f E
}
chre
c A
}

foreach (detecteur_voyelle($ma_chaine) as $key => $value)
{
echo "position $key : voyelle : $value<br>";
}

H & H: Research and Training 178 / 218


Fonctions Fonctions génératrices

PHP

Étant donné le tableau à deux dimension suivant


$matrice = array(
array(2, 3, 5, 7),
I c

array(1, 2, 5, 9, 5),
ELH
array(4, 2, 9, 3, 1, 5)
U
);
L MO
f E
chre
Exercice
c A

Écrire une fonction génératrice qui retourne chaque fois les éléments
pairs de la ligne suivante de la matrice.

H & H: Research and Training 179 / 218


Fonctions Fonctions génératrices

PHP
Correction
function estPair(int $x): bool
{
return $x % 2 == 0;
I c

}
function pair_ligne_matrice(array $tab)
ELH
U
{
foreach ($tab as $key => $value) {
L MO
f E
hre
yield $key => array_filter($value, ’estPair’);
} c
} c A

foreach (pair_ligne_matrice($matrice) as $key => $value)
{
echo "position $key : élément.s pair.s : " . implode
("-", $value) . "<br>";
}

H & H: Research and Training 180 / 218


Fonctions Fonctions génératrices

PHP
L’instruction yield from permet de retourner un nombre défini dans
un tableau
function generer_nombre()
{
yield 0;
I c

yield from [1, 3, 6, 10];
ELH
yield 100; U
}
L MO
f E
chre
c A

H & H: Research and Training 181 / 218


Fonctions Fonctions génératrices

PHP
L’instruction yield from permet de retourner un nombre défini dans
un tableau
function generer_nombre()
{
yield 0;
I c

yield from [1, 3, 6, 10];
ELH
yield 100; U
}
L MO
f E
A c
Pour appeler la fonction
hre
c

foreach (generer_nombre() as $value) {
echo "$value ";
}

/* affiche 0 1 3 6 10 100 */

H & H: Research and Training 181 / 218


Variables locales et globales

PHP

En PHP, une fonction utilise ses variables locales


function afficherNom()
I c

{
ELH
$nom = "doe";
U
echo $nom;
L MO
}
f E
c hre
$nom = "wick";
afficherNom();
c A

// affiche doe

H & H: Research and Training 182 / 218


Variables locales et globales

PHP

Une fonction peut accéder aux variables définies dans le contexte


global en utilisant la variable super-globale $GLOBALS (tableau
associatif)
I c

function afficherNom()
ELH
{ U
$nom = "doe";
L MO
f E
hre
echo $GLOBALS[’nom’];
}
A c
c
$nom = "wick";
afficherNom();
// affiche wick

H & H: Research and Training 183 / 218


Math

PHP

I c
PHP Math
EL H
O U
API de PHP CORE contenant plusieurs
L M fonctions permettant de

r e f E
réaliser des opérations mathématiques sur les nombres...

A ch
c

H & H: Research and Training 184 / 218


Math

Exemple de fonctions calculant l’arrondi


echo round(2.1);
/* affiche 2 */

echo round(2.9);
/* retourne 3 */
I c

echo ceil(2.1); ELH
U
/* retourne 3 */
L MO
f E
hre
echo ceil(2.9);

A c
/* retourne 3 */
c

echo floor(2.1);
/* retourne 2 */

echo floor(2.9);
/* retourne 2 */

H & H: Research and Training 185 / 218


Math

Autres fonctions
echo pow(2, 3);
/* retourne 8 */

echo sqrt(4);
/* retourne 2 */
I c

echo abs(-2);
ELH
U
MO
/* retourne 2 */

echo min(0, 1, 4, 2, -4, -5);


f E L
c
/* retourne -5 */
A hre
c
1, 4, 2, -4, -5);
echo max(0,
/* retourne 4 */

echo rand(10, 100);


/* retourne un nombre aléatoire compris entre 10 et 100
*/

H & H: Research and Training 186 / 218


Math

PHP

Exercice I c
EL H
U
O une équation de
Écrire une fonction PHP qui permet de résoudre
M
L valeurs si l’équation a deux
second degré. La fonction retourne un tableau vide si l’équation n’a
e
pas de solution, un tableau f
à E
deux
rcontenant
A c h
solutions ou un tableau une seule valeur sinon.
c

H & H: Research and Training 187 / 218


Date

PHP

I c
PHP Date
EL H
O U
L M
API de PHP CORE contenant plusieurs fonctions permettant de
manipuler les dates...
h r e fE
A c
c

H & H: Research and Training 188 / 218


Date

PHP

Pour créer et retourner la date du jour (string)


echo date("d-m-Y H:i:s");
// affiche la date du jour selon le format passé en
I c

paramètre
ELH
U
L MO
f E
chre
c A

H & H: Research and Training 189 / 218


Date

PHP

Pour créer et retourner la date du jour (string)


echo date("d-m-Y H:i:s");
// affiche la date du jour selon le format passé en
I c

paramètre
ELH
U
L MO
f E
hre
Pour avoir une heure respectant le fuseau horaire de Paris
c
c A

date_default_timezone_set(’Europe/Paris’);
echo date("d-m-Y H:i:s");
// affiche la date du jour avec l’heure du fuseau
horaire choisi

H & H: Research and Training 189 / 218


Date

PHP
Quelques autres indices pour les dates

d : le jour du mois (de 01 à 31)

D : une représentation textuelle du jour (trois lettres)

j : le jour du mois sans zéro (de 1 à 31)


I c

ELH
w : une représentation numérique du jour (0 pour dimanche, 6 pour samedi)
U
z : le jour de l’année (de 0 à 365)
L MO
f E
hre
F : une représentation textuelle complète du mois (January à December)

c
c A
m : une représentation numérique du mois (de 01 à 12)

M : une représentation textuelle courte du mois (trois lettres)

n : une représentation numérique du mois, sans le zéro au début (de 1 à 12)

Y : une représentation numérique de l’année (4 chiffres)

y : une représentation numérique de l’année (2 chiffres)

H & H: Research and Training 190 / 218


Date

PHP
Quelques autres indices pour les heures

a : am ou pm en minuscule

A : AM ou PM en majuscule

g : format d’heure de 1 à 12
I c

G : format d’heure de 0 à 23
ELH
U
h : format d’heure de 01 à 12
L MO
f E
hre
H : format d’heure de 00 à 23

c
c A
i : minutes avec un zéro au début (de 00 à 59)

s : secondes avec un zéro au début (de 00 à 59)

u : microsecondes (depuis PHP 5.2.2)

e : fuseau horaire (exemples : UTC, GMT, Atlantic/Azores)

T : abréviations du fuseau horaire (exemples : EST, MDT)

H & H: Research and Training 191 / 218


Date

PHP
Pour récupérer le mois actuel
echo date("m");

I c

ELH
U
L MO
f E
chre
c A

H & H: Research and Training 192 / 218


Date

PHP
Pour récupérer le mois actuel
echo date("m");

Pour créer une date à partir d’une chaı̂ne de caractères


I c

ELH
$ma_date = date("d-m-Y H:i:s", strtotime("30-07-2015 10:30:11"));
echo $ma_date;
U
// affiche 30-07-2015 10:30:11
L MO
f E
chre
c A

H & H: Research and Training 192 / 218


Date

PHP
Pour récupérer le mois actuel
echo date("m");

Pour créer une date à partir d’une chaı̂ne de caractères


I c

ELH
$ma_date = date("d-m-Y H:i:s", strtotime("30-07-2015 10:30:11"));
echo $ma_date;
U
// affiche 30-07-2015 10:30:11
L MO
f E
chre
c A
Pour générer des dates dans le futur ou dans le passé.

$hier = mktime(0, 0, 0, date("m"), date("d") - 1, date("Y"));
echo date("d-M-Y", $hier);
// affiche 16-Mar-2020

$demain = mktime(0, 0, 0, date("m"), date("d") + 1, date("Y"));


echo date("d-M-Y", $demain);
// affiche 18-Mar-2020

H & H: Research and Training 192 / 218


Date

PHP

Remarque
I c

E L H
mktime retourne un timestamp (entier) correspondant au nombre
U
O de l’époque UNIX
de secondes écoulées depuis le début
L etM
h r e fE
(01/01/1970 00 :00 :00 GMT) le temps passé en paramètre.

A c
time() retourne le timestamp UNIX actuel
c

H & H: Research and Training 193 / 218


Date

PHP
Pour récupérer une date en français, on utilise strftime qui accepte les options suivantes

%A : une représentation textuelle complète du jour


%a : une représentation textuelle courte du jour
%e : le jour du mois (de 1 à 31)
%d : le jour du mois (de 01 à 31)
I c

%j : le jour de l’année (de 1 à 366)
ELH
U
MO
%u : une représentation numérique du jour (de 1 pour lundi au 7 pour dimanche)

f E L
%m : une représentation numérique du mois (de 01 à 12)

hre
%b : une représentation textuelle courte du mois

c
c A
%B : une représentation textuelle complète du mois


%Y : une représentation numérique de l’année (4 chiffres)
%y : une représentation numérique de l’année (2 chiffres)
%H : heure de 00 à 23
%I : heure de 00 à 12
%M : minute
%S : seconde

H & H: Research and Training 194 / 218


Date

PHP

Exemple
I c

setlocale(LC_TIME, ’fr_FR’);
EL H
O
$now = mktime(8, 20, 50, date("m"), U date("d"), date(
M
L%y %H:%M:%S", $now);
"Y"));
f E
emars 20 08:20:50
echo strftime("%A r%e %B
c h
c A
// affiche mardi 17

H & H: Research and Training 195 / 218


Date

PHP

Exemple avec checkdate qui retourne true si la date passée en


paramètre est correcte, false sinon.
var_dump(checkdate(1, 31, -400));
/* affiche false */ I c

ELH
U
MO
var_dump(checkdate(2, 29, 2019));
L
fE
/* affiche false */

c h r e
c A
var_dump(checkdate(2,
true */
/* affiche
29, 2020));

var_dump(checkdate(30, 7, 2004));
/* affiche false */

H & H: Research and Training 196 / 218


Date

PHP

Autres fonctions pour les dates (DateTime)

date create() : crée et retourne une DateTime en utilisant une


date sous forme d’une chaı̂ne de caractère et un fuseau horaire
I c

ELH
date modify() : retourne une DateTime modifiée en fonction
d’un texte exprimé en anglais U
L MO
E
date format() : retourne une chaı̂ne de caractère construite à
f
hre
partir d’une DateTime et un format
c
c A

date diff() : retourne la différence entre deux dates
date timestamp get() : retourne le timestamp d’une
DataTime passée en paramètre
...

H & H: Research and Training 197 / 218


Date

PHP
Exemple avec date create et date format
$date = date_create();
echo date_format($date,"d-m-Y H:i:s");
// affiche la date du jour avec un décalage d’une heure

I c

ELH
U
L MO
f E
chre
c A

H & H: Research and Training 198 / 218


Date

PHP
Exemple avec date create et date format
$date = date_create();
echo date_format($date,"d-m-Y H:i:s");
// affiche la date du jour avec un décalage d’une heure

I c

EL H
U
Pour avoir l’heure exacte, il faut préciser le fuseau horaire
O
L M
$date = date_create("", timezone_open("Europe/Paris"));
echo date_format($date,"d-m-Y
r e f Eexactes
H:i:s");
// affiche les date et
A ch heure

H & H: Research and Training 198 / 218


Date

PHP
Exemple avec date create et date format
$date = date_create();
echo date_format($date,"d-m-Y H:i:s");
// affiche la date du jour avec un décalage d’une heure

I c

EL H
U
Pour avoir l’heure exacte, il faut préciser le fuseau horaire
O
L M
$date = date_create("", timezone_open("Europe/Paris"));
echo date_format($date,"d-m-Y
r e f Eexactes
H:i:s");
// affiche les date et
A ch heure

c
On peut aussi utiliser date create pour créer une DateTime d’une autre date
$date = date_create("2018-07-30 21:30:10"); // obligatoirement
année-mois-jour
echo date_format($date, "d-m-Y H:i:s");
// affiche 30-07-2018 21:30:10

H & H: Research and Training 198 / 218


Date

PHP
Exemple avec date diff
$date1 = date_create("2017-03-29");
$date2 = date_create("2017-07-30");
$diff = date_diff($date1, $date2);
I c

ELH
U
MO
echo ($diff->days);
/* affiche 123 */
f E L
chre
c A

H & H: Research and Training 199 / 218


Date

PHP
Exemple avec date diff
$date1 = date_create("2017-03-29");
$date2 = date_create("2017-07-30");
$diff = date_diff($date1, $date2);
I c

ELH
U
MO
echo ($diff->days);
/* affiche 123 */
f E L
A c hre
c
Exemples
avec date timestamp get
$date = date_create("2018-01-01");
echo date_timestamp_get($date);
// affiche 1514764800

H & H: Research and Training 199 / 218


Date

Exemple avec date modify

$date=date_create("2018-01-01");
echo date_format($date,"d-m-Y H:i:s") . "<br>";
/* affiche 01-01-2018 00:00:00 */

date_modify($date,"+15 days");
echo date_format($date,"d-m-Y H:i:s") . "<br>";
I c

/* affiche 16-01-2018 00:00:00 */
E L H
U
date_modify($date,"-1 week");
echo date_format($date,"d-m-Y L MO. "<br>";
f E */
H:i:s")

r e
/* affiche 09-01-2018 00:00:00
h
c months");
c A
date_modify($date,"+3
echo date_format($date,"d-m-Y H:i:s") . "<br>";
/* affiche 09-04-2018 00:00:00 */

date_modify($date,"24 hours 1 minute");


echo date_format($date,"d-m-Y H:i:s") . "<br>";
/* affiche 10-04-2018 00:01:00 */

H & H: Research and Training 200 / 218


Date

PHP

On peut aussi créer une DateTime en utilisant par la classe


$date = new DateTime(’2008-07-30’);
echo $date->format(’d-m-Y H:i:s’); I c

// affiche 30-07-2008 00:00:00
ELH
U
L MO
f E
chre
c A

H & H: Research and Training 201 / 218


Date

PHP

On peut aussi créer une DateTime en utilisant par la classe


$date = new DateTime(’2008-07-30’);
echo $date->format(’d-m-Y H:i:s’); I c

// affiche 30-07-2008 00:00:00
ELH
U
L MO
f E
re procédurale du code précédent
c h
L’équivalent en programmation
$date = c A
date_create(’2008-07-30’);
echo date_format($date, ’Y-m-d H:i:s’);
// affiche 30-07-2008 00:00:00

H & H: Research and Training 201 / 218


Date

PHP
On peut utiliser date diff pour calculer la différence entre deux DateTime
créée de deux manières différentes

$date1 = date_create("2017-03-29");
$date2 = new DateTime(’2017-07-30’);
$diff = date_diff($date1, $date2);
I c

echo ($diff->days);
ELH
U
MO
/* affiche 123 */

f E L
chre
c A

H & H: Research and Training 202 / 218


Date

PHP
On peut utiliser date diff pour calculer la différence entre deux DateTime
créée de deux manières différentes

$date1 = date_create("2017-03-29");
$date2 = new DateTime(’2017-07-30’);
$diff = date_diff($date1, $date2);
I c

echo ($diff->days);
ELH
U
MO
/* affiche 123 */

f E L
Ou aussi
A c hre
c
$date1 = date_create("2017-03-29");
$date2 = new DateTime(’2017-07-30’);
$diff = $date2->diff($date1);

echo ($diff->days);
/* affiche 123 */

H & H: Research and Training 202 / 218


Date

PHP

Étant données les trois variables suivantes


$mois = 12;
$jour = 31;
I c

$annee = 2019;
ELH
U
L MO
f E
chre
c A

H & H: Research and Training 203 / 218


Date

PHP

Étant données les trois variables suivantes


$mois = 12;
$jour = 31;
I c

$annee = 2019;
ELH
U
L MO
f E
Exercice
A c hre
Écrivez un
c
script PHP qui permet de vérifier si les trois variables
précédentes forment une date valide. Si oui, le script affiche la
différence en nombre de jours entre cette date et la date courante.

H & H: Research and Training 203 / 218


Date

PHP

Correction
$mois = $_GET[’mois’] ?? 12;
$jour = $_GET[’jour’] ?? 31;
I c

$annee = $_GET[’annee’] ?? 2019;
ELH
if (checkdate($mois, $jour, $annee)) { U
L MO
$date1 = date_create("$annee-$mois-$jour");
f E
hre
$date2 = new DateTime();
c
$diff = $date2->diff($date1);
c A

echo $diff->days;
} else {
echo "date incorrecte";
}

H & H: Research and Training 204 / 218


Date

PHP

La fonction date create accepte un seul format de date. On peut


utiliser la fonction date create from format qui accepte un
format personnalisé

I c

$motif = "d/m/Y H:i:s";
ELH
U
$date = date_create_from_format($motif ,’10/04/2020
08:15:00’);
L MO
f E
chre
c A

H & H: Research and Training 205 / 218


Date

PHP

La fonction date create accepte un seul format de date. On peut


utiliser la fonction date create from format qui accepte un
format personnalisé

I c

$motif = "d/m/Y H:i:s";
ELH
U
$date = date_create_from_format($motif ,’10/04/2020
08:15:00’);
L MO
f E
chre
c A

Ou la version objet
$motif = "d/m/Y H:i:s";
$date = DateTime::createFromFormat($motif ,’
10/04/2020 08:15:00’);

H & H: Research and Training 205 / 218


Fichiers

PHP

Les fichiers
Utilisés pour stocker et/ou échanger les données

I c

Pouvant être en écriture ou en lecture
ELH
U
L MO
f E
chre
c A

H & H: Research and Training 206 / 218


Fichiers

PHP

Les fichiers
Utilisés pour stocker et/ou échanger les données

I c

Pouvant être en écriture ou en lecture
ELH
U
L MO
f E
re de fichiers en PHP
h
3 étapes pour la manipulation
c
c A
Ouverture
Utilisation : écriture ou lecture
Fermeture

H & H: Research and Training 206 / 218


Fichiers Ouverture

PHP
Syntaxe
$mon_logique = fopen (nom_physique, mode_ouverture);

I c

ELH
U
L MO
f E
chre
c A

H & H: Research and Training 207 / 218


Fichiers Ouverture

PHP
Syntaxe
$mon_logique = fopen (nom_physique, mode_ouverture);

Quatre modes d’ouverture


I c
E leL
H
O U
a : ouvre le fichier, s’il existe, en écriture seule place pointeur à la fin du

L M
fichier. S’il n’existe pas,il sera automatiquement créé.

e
a+ : ouvre le fichier en lecture f E
et écriture. Si le fichier n’existe pas, il sera
automatiquement créh é.rS’il
A c existe, le texte sera ajouté à la fin.

r : ouvre c le fichier en lecture seule et place le pointeur au début du fichier. Si le


fichier n’existe pas, il ne sera pas créé.

r+ : ouvre le fichier en lecture et écriture, et place le pointeur au début du fichier.


Si le fichier n’existe pas, il ne sera pas créé.

...

H & H: Research and Training 207 / 218


Fichiers Fermeture

PHP

I c

Syntaxe ELH
U
fclose (nom_fichier);
L MO
f E
chre
c A

H & H: Research and Training 208 / 218


Fichiers Fermeture

Quelques fonctions sur les fichiers

file exists : retourne true si le fichier passé en paramètre existe, false sinon.

is dir : retourne true si le paramètre correspond à un dossier, false sinon.

is file : retourne true si le paramètre correspond à un fichier, false sinon.

I c

sinon.
ELH
feof : retourne true si le pointeur est à la fin du fichier ou si une erreur survient, false

U
sinon.
L MO
unlink : permet de supprimer un fichier. Elle retourne true en cas de succès, false

f E
hre
copy : permet de copier un fichier. Elle retourne true en cas de succès, false sinon.
c
c A

rename : permet de renommer un dossier ou fichier.

glob : retourne un tableau contenant les noms de dossiers et fichiers respectant un motif
passé en paramètre.

filesize : retourne la taille d’un fichier (nombre d’octets)

...

H & H: Research and Training 209 / 218


Fichiers Fermeture

PHP

Exemple
I c

if (file_exists("file.txt")) {
ELH
U
echo "fichier trouvé";
L MO
fE
} else {

c h e
echo "fichier rnon trouvé";

c A
}

H & H: Research and Training 210 / 218


Fichiers Utilisation

PHP

Quelques fonctions d’écriture

fwrite : écrit une chaı̂ne de caractère dans un fichier et retourne


I c

H
le nombre d’octets écrits, ou false si une erreur survient.
EL
U
MO
fputs : alias de fwrite

f E L
file put contents = fopen + fwrite + fclose : Si le fichier
chre
n’existe pas, il sera créé. Sinon, le fichier existant sera écrasé.
c A

Ajoutez une constante FILE APPEND comme troisième paramètre
pour ajouter les données au fichier au lieu de l’écraser..
...

H & H: Research and Training 211 / 218


Fichiers Utilisation

PHP
Exemple d’écriture dans un fichier

if (file_exists("file.txt")) {
$mon_fichier = fopen ("file.txt","a");
$nbr_octet = fwrite($mon_fichier, "bonjour");
echo $nbr_octet;
I c

fclose ($mon_fichier);
} else {
ELH
U
MO
echo "fichier non trouvé";
}
f E L
chre
c A

H & H: Research and Training 212 / 218


Fichiers Utilisation

PHP
Exemple d’écriture dans un fichier

if (file_exists("file.txt")) {
$mon_fichier = fopen ("file.txt","a");
$nbr_octet = fwrite($mon_fichier, "bonjour");
echo $nbr_octet;
I c

fclose ($mon_fichier);
} else {
ELH
U
MO
echo "fichier non trouvé";
}
f E L
A c hre
Pour refaire la même chose avec file put contents
c
if (file_exists("file.txt")) {
$nbr_octet = file_put_contents("file.txt", "bonjour");
echo $nbr_octet;
} else {
echo "fichier non trouvé";
}

H & H: Research and Training 212 / 218


Fichiers Utilisation

PHP

Quelques fonctions de lecture

file get contents : retourne tout le contenu d’un fichier dans une chaı̂ne de
caractères.
I c
H
ELchaı̂ne de caractères.
fgets : retourne la ligne courante d’un fichier dans une

fgetss : retourne la ligne courante duM


U
Oet élimine les balises HTML.
fE L fichier

h r
fgetc : retourne un caract
c eère d’un fichier.

c Aun fichier sous forme d’un tableau de chaı̂nes de caractères.


file : retourne

filemtime : retourne la date de la dernière modification du fichier.

...

H & H: Research and Training 213 / 218


Fichiers Utilisation

PHP
Exemple de lecture

if (file_exists("file.txt")) {
$mon_fichier = fopen ("file.txt","r");
$contenu = fgets($mon_fichier);
echo ($contenu);
I c

fclose ($mon_fichier);
} else {
ELH
U
MO
echo "fichier non trouvé";
}
f E L
chre
c A

H & H: Research and Training 214 / 218


Fichiers Utilisation

PHP
Exemple de lecture

if (file_exists("file.txt")) {
$mon_fichier = fopen ("file.txt","r");
$contenu = fgets($mon_fichier);
echo ($contenu);
I c

fclose ($mon_fichier);
} else {
ELH
U
MO
echo "fichier non trouvé";
}
f E L
A c hre
Pour refaire la même chose avec file get contents
c
if (file_exists("file.txt")) {
$contenu = file_get_contents("file.txt");
echo $contenu;
} else {
echo "fichier non trouvé";
}

H & H: Research and Training 214 / 218


Fichiers Utilisation

PHP

I c
Exercice
EL H
lireO
Écrivez un script PHP qui permet deM
U
tout le contenu d’un fichier en
utilisant fgets. fE L
c h r e
c A

H & H: Research and Training 215 / 218


Fichiers Utilisation

Première solution

if (file_exists("file.txt")) {
$mon_fichier = fopen("file.txt", "r");
while ($contenu = fgets($mon_fichier)) {
echo $contenu . ’<br>’;
}
fclose($mon_fichier);
} else {
I c

}
echo "fichier non trouvé";

ELH
U
L MO
f E
chre
c A

H & H: Research and Training 216 / 218


Fichiers Utilisation

Première solution

if (file_exists("file.txt")) {
$mon_fichier = fopen("file.txt", "r");
while ($contenu = fgets($mon_fichier)) {
echo $contenu . ’<br>’;
}
fclose($mon_fichier);
} else {
I c

}
echo "fichier non trouvé";

ELH
U
L MO
f E
hre
Deuxième solution

c
c A
if (file_exists("file.txt")) {


$mon_fichier = fopen("file.txt", "r");
while (!feof($mon_fichier)) {
echo fgets($mon_fichier) . "<br />";
}
fclose($mon_fichier);
} else {
echo "fichier non trouvé";
}

H & H: Research and Training 216 / 218


Fichiers Utilisation

PHP

Étant donné le fichier file.txt ayant le contenu suivant


15
12
17
I c

13
ELH
U
MO
10
16
f E L
chre
c A

H & H: Research and Training 217 / 218


Fichiers Utilisation

PHP

Étant donné le fichier file.txt ayant le contenu suivant


15
12
17
I c

13
ELH
U
MO
10
16
f E L
chre
c A

Exercice

Écrivez un script PHP qui permet de calculer la moyenne des valeurs


définies dans file.txt.

H & H: Research and Training 217 / 218


Fichiers Utilisation

PHP

Correction
I c

if (file_exists("file.txt")) {
ELH
$contenu = file("file.txt"); U
echo max($contenu);
L MO
f E
hre
} else {
c
echo "fichier non trouvé";
} c A

H & H: Research and Training 218 / 218

Vous aimerez peut-être aussi