Académique Documents
Professionnel Documents
Culture Documents
Achref El Mouelhi
elmouelhi.achref@gmail.com
1 Introduction
2 Avant de commencer
4 Commentaires
5 Variables
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
13 Math
14 Date
15 Fichiers
Ouverture
Fermeture
Utilisation
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)
PHP
PHP, pourquoi ?
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...
applications web
I c
applications mobiles
ELH
U
sites web dynamiques
L MO
f E
hre
Services web
c
c A
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
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
PHP
PHP
PHP
Première utilisation de WAMP
Démarrer WAMP
fE L
c h r e
c A
PHP
Première utilisation de WAMP
Démarrer WAMP
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
...
PHP
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
PHP
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...
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
PHP
I c
ELH
U
L MO
f E
chre
c A
PHP
I c
ELH
U
L MO
f E
chre
c A
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
PHP
PHP
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
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
PHP
PHP
PHP
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
PHP
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.
PHP
Les commentaires
I c
ELH
U
L MO
f E
chre
c A
PHP
Les 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
PHP
Les 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 */
PHP
Les 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 ?
PHP
Une variable ?
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.
PHP
Exemple 1
$x = 5;
I c
ELH
U
L MO
f E
chre
c A
PHP
Exemple 1
$x = 5;
Exemple 2 I c
ELH
$_x = 5; U
L MO
f E
chre
c A
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
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)
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
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
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
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
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)*/
PHP
Remarques
fE L
c h r e
c A
PHP
Remarques
fE L
c h r e
c A
Exemple avec is string()
$var = "hello";
echo is_string($var) ,"<br>";
/* affiche 1 */
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
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 */
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.
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
PHP
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
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()
PHP
PHP
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
PHP
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;
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
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 */
PHP
PHP
PHP
PHP
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";
?>
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
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 */
PHP
La fonction strcmp() pour comparer deux chaı̂nes de caractères
$string = "bon";
$string2 = "jour";
PHP
La fonction strcmp() pour comparer deux chaı̂nes de caractères
$string = "bon";
$string2 = "jour";
PHP
Fonctions utiles pour les chaı̂nes de caractères
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.
...
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
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 */
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
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
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 */
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
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
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 */
PHP
PHP
PHP
PHP
PHP
PHP
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);
PHP
PHP
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;
?>
PHP
f E L
hre
/* le code source généré
c
c A
bonjour <br />
john <br />
wick <br />
ou <br />
Keanu Reeves
*/
PHP
f E L
c hre
c A
PHP
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 */
$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
$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
$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 */
PHP
PHP
PHP
PHP
Opérateurs de comparaison
PHP
Exemple
I c
ELH
$x = 3;
U
if ($x >= 0) {
L MO
echo $x . " est positif";
f E
}
chre
c A
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
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";
}
PHP
PHP
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";
}
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
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";
?>
PHP
PHP
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
?>
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
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 ...]
PHP
PHP
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
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";
}
?>
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;
}
PHP
Remarques
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");
}
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");
}
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 */
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
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
PHP
PHP
PHP
PHP
PHP
Exemple
$i = 0;
while ($i < 5) {
echo $i, "<br>";
I c
$i++;
ELH
}
U
L MO
f E
chre
c A
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
PHP
PHP
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;
PHP
PHP
PHP
Exemple
$i = 0;
do {
echo $i, "<br>";
I c
$i++;
ELH
} while ($i < 5);
U
L MO
f E
chre
c A
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
PHP
PHP
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;
?>
PHP
Boucle for
I c
for (initialisation; condition[s]; incrémentation) {
ELH
...
U
}
L MO
f E
chre
c A
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.
PHP
Exemple
for ($i = 0; $i < 5; $i++) {
echo $i, "<br>";
I c
}
ELH
U
L MO
f E
chre
c A
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
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
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
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
PHP
PHP
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";
?>
PHP
PHP
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>
PHP
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
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
];
PHP
PHP
PHP
PHP
PHP
PHP
PHP
PHP
PHP
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;
PHP
PHP
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
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;
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
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
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 */
PHP
PHP
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
...
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 ( ) */
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 ( ) */
PHP
PHP
PHP
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 ) */
PHP
I c
echo $string;
/* affiche foot-tennis-basket-volley */
ELH
U
echo gettype($string);
L MO
/* affiche string */
f E
chre
c A
PHP
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
PHP
c =>A k =>
[10] => h[11]
=> c[16]
n[12] =>[13] => w[14] => i[15]
) */
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
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
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 */
PHP
PHP
PHP
PHP
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
*/
PHP
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
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
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
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
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
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
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
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 */
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 */
PHP
$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
PHP
$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.
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);
PHP
$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
PHP
$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.
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");
PHP
Une constante
I c
ELH
U
L MO
f E
chre
c A
PHP
Une constante
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
PHP
Une constante
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);
PHP
Une constante
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);
PI = 5;
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
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
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
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
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
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 */
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
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
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
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 */
echo(somme());
I c
ELH
U
L MO
f E
chre
c A
echo(somme());
function somme($a = 0, $b = 0)
{
I c
return $a + $b;
ELH
}
U
L MO
f E
chre
c A
echo(somme());
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 */
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
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 */
Depuis PHP 5.6, on peut aussi utiliser le concept de décomposition avec l’opérateur ...
Depuis PHP 5.6, on peut aussi utiliser le concept de décomposition avec l’opérateur ...
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 */
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));
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
PHP
PHP
Exercice
PHP
Exercice
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
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 */
}
PHP
PHP
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
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 */
PHP
Fonction de retour (ou de rappel, en anglais callback)
PHP
Fonction de retour (ou de rappel, en anglais callback)
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;
PHP
A
operation (3, c ’somme’);
5,
c
8 */
/* affiche
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 */
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 */
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
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
PHP
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 ) */
PHP
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 ) */
PHP
f E L
hre
function somme($x, $y)
c
c A
{
}
return $x + $y;
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
PHP
PHP
PHP
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
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
}
PHP
Exemple
function somme(int $a, int $b)
{
I c
return $a + $b;
ELH
}
U
L MO
f E
chre
c A
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 */
PHP
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
PHP
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
}
PHP
Exemple
function somme(int $a, int $b): int
{
I c
return $a + $b;
ELH
}
U
L MO
f E
chre
c A
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 */
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
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.
PHP
PHP
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
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
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);
?>
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
PHP
Considérons la fonction dire bonjour suivante
ELH
}
U
L MO
f E
chre
c A
PHP
Considérons la fonction dire bonjour suivante
ELH
}
U
L MO
f E
hre
Appeler cette fonction avec une valeur NULL implique une erreur fatale
c
c A
dire_bonjour(null);
PHP
Considérons la fonction dire bonjour suivante
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
PHP
Question
I c
ELH
Comment autoriser la valeur null pour les autres types ?
U
L MO
f E
chre
c A
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
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
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*/
PHP
Fonction génératrice
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
PHP
Fonction génératrice
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;
}
}
PHP
I c
ELH
U
L MO
f E
chre
c A
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
*/
PHP
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>";
}
PHP
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>";
}
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
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 */
PHP
PHP
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
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 */
Autres fonctions
echo pow(2, 3);
/* retourne 8 */
echo sqrt(4);
/* retourne 2 */
I c
echo abs(-2);
ELH
U
MO
/* retourne 2 */
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
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
PHP
PHP
PHP
Quelques autres indices pour les dates
c
c A
m : une représentation numérique du mois (de 01 à 12)
M : une représentation textuelle courte du mois (trois lettres)
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)
PHP
Pour récupérer le mois actuel
echo date("m");
I c
ELH
U
L MO
f E
chre
c A
PHP
Pour récupérer le mois actuel
echo date("m");
PHP
Pour récupérer le mois actuel
echo date("m");
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
PHP
Pour récupérer une date en français, on utilise strftime qui accepte les options suivantes
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
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
PHP
c h r e
c A
var_dump(checkdate(2,
true */
/* affiche
29, 2020));
var_dump(checkdate(30, 7, 2004));
/* affiche false */
PHP
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
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
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
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
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
$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 */
PHP
PHP
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
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 */
PHP
PHP
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";
}
PHP
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
PHP
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’);
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
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
PHP
Syntaxe
$mon_logique = fopen (nom_physique, mode_ouverture);
I c
ELH
U
L MO
f E
chre
c A
PHP
Syntaxe
$mon_logique = fopen (nom_physique, mode_ouverture);
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.
...
PHP
I c
Syntaxe ELH
U
fclose (nom_fichier);
L MO
f E
chre
c A
file exists : retourne true si le fichier passé en paramètre existe, 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.
...
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
}
PHP
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..
...
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
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é";
}
PHP
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
h r
fgetc : retourne un caract
c eère d’un fichier.
...
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
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é";
}
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
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
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é";
}
PHP
PHP
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