Post on 25-Jun-2021
transcript
PHP : les fondamentaux
Achref El Mouelhi
Docteur de l’universite d’Aix-MarseilleChercheur en programmation par contrainte (IA)
Ingenieur en genie 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 operations sur les variables
7 Fonctions utiles pour les chaınes de caracteres
H & H: Research and Training 2 / 218
Plan
8 Conditions et bouclesifif ... elseif ... elseif ... elseswitchElvis operatorNull coalescingwhiledo ... whilefor
9 TableauxTableaux indexesTableaux associatifsTableaux multidimensionnels
10 Constantes
H & H: Research and Training 3 / 218
Plan
11 FonctionsFonctions nommeesFonctions anonymesValeurs par defaut pour les parametresFonctions a nombre indetermine de parametresDecompositionPassage par referenceFonction de retour (callback)Fonctions flechees (Arrow functions)Typage de parametresTypage de valeurs de retourTypage strictType NullableFonctions generatrices
H & H: Research and Training 4 / 218
Plan
12 Variables locales et globales
13 Math
14 Date
15 FichiersOuvertureFermetureUtilisation
H & H: Research and Training 5 / 218
c© Achref EL MOUELHI c©
Introduction
PHP
PHP
Initialement pour Personal Home Page ensuite pour PHP :Hypertext Preprocessor)
langage de programmation open-source
oriente-objet et procedural
imperatif
interprete
faiblement type
cree en 1994 par Rasmus Lerdorf dans le cadre d’un projetpersonnel pour gerer les visiteurs de son site web
syntaxe tres proche du C (procedural), C++ (procedural,oriente-objet) et Java (oriente-objet)
H & H: Research and Training 6 / 218
c© Achref EL MOUELHI c©
Introduction
PHP
PHP, pourquoi?
Langage de haut niveau (pas de gestion de memoire, pasd’allocation dynamique, pas de pointeur... comme en C et C++)
Facile a apprendre et a utiliser
Nombreuses documentations, supports videos, plusieursexemples sur internet
Enorme communaute : un des langages les plus utilises dans lemonde
Permettant de developper rapidement des programmesportables : Windows, Mac OS, Linux...
H & H: Research and Training 7 / 218
c© Achref EL MOUELHI c©
Introduction
Quel type d’application?
Applications utilisables en ligne de commande (scripting)
La partie serveur pour
applications web
applications mobiles
sites web dynamiques
Services web
Quelques technologies concurrentes a PHP
JSP (Java Server Pages) : contenu dynamique ecrit en Java
ASP.Net (Active Server Pages) : contenu dynamique pouvant etreecrit dans tous les langages de la plateforme .Net (C#, VB.Net...)
H & H: Research and Training 8 / 218
c© Achref EL MOUELHI c©
Introduction
Quel type d’application?
Applications utilisables en ligne de commande (scripting)
La partie serveur pour
applications web
applications mobiles
sites web dynamiques
Services web
Quelques technologies concurrentes a PHP
JSP (Java Server Pages) : contenu dynamique ecrit en Java
ASP.Net (Active Server Pages) : contenu dynamique pouvant etreecrit dans tous les langages de la plateforme .Net (C#, VB.Net...)
H & H: Research and Training 8 / 218
c© Achref EL MOUELHI c©
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 decembre 2001 : Version 4.1.
13 juillet 2004 : Version 5.0.
24 novembre 2005 : Version 5.1.
2 novembre 2006 : Version 5.2.
30 juin 2009 : Version 5.3.
1er mars 2012 : Version 5.4.
20 juin 2013 : Version 5.5.
28 aout 2014 : Version 5.6.
3 decembre 2015 : Version 7.0.
1 decembre 2016 : Version 7.1.
30 novembre 2017 : Version 7.2.
6 decembre 2018 : Version 7.3.
21 novembre 2019 : Version 7.4.
H & H: Research and Training 9 / 218
c© Achref EL MOUELHI c©
Introduction
PHP
Client
Interpreteur
PHP
index.php
Serveur
Serveur
Web HTTP
RequeteHTTP
(index.php)
ReponseHTTP
HTML
CSS + JSBase de
donnees
H & H: Research and Training 10 / 218
c© Achref EL MOUELHI c©
Introduction
PHP
De quoi on a besoin (le minimum)?
Un editeur de texte (Bloc-notes, Notepad++, Sublime Text...)
Un serveur web (Apache)
Un interpreteur du langage PHP
Et probablement un systeme de gestion de base de donnees(generalement MySQL)
Sous Windows, on peut les trouver dans WAMP
http://www.wampserver.com/
H & H: Research and Training 11 / 218
c© Achref EL MOUELHI c©
Introduction
PHP
De quoi on a besoin (le minimum)?
Un editeur de texte (Bloc-notes, Notepad++, Sublime Text...)
Un serveur web (Apache)
Un interpreteur du langage PHP
Et probablement un systeme de gestion de base de donnees(generalement MySQL)
Sous Windows, on peut les trouver dans WAMP
http://www.wampserver.com/
H & H: Research and Training 11 / 218
c© Achref EL MOUELHI c©
Introduction
PHPPremiere utilisation de WAMP
Demarrer WAMP
Cliquer sur WAMP dans la barre de demarrage et choisir Redemarrer lesservices
Si l’icone de WAMP n’est pas en vert, aller verifierhttp://forum.wampserver.com/read.php?1,88043
Quelques elements dans le menu de demarrage de WAMP
localhost : page de demarrage de WAMP
phpMyAdmin : page web permettant la gestion des bases de donnees MySQL
Repertoire www : emplacement des projets PHP sur le disque dur
...
H & H: Research and Training 12 / 218
c© Achref EL MOUELHI c©
Introduction
PHPPremiere utilisation de WAMP
Demarrer WAMP
Cliquer sur WAMP dans la barre de demarrage et choisir Redemarrer lesservices
Si l’icone de WAMP n’est pas en vert, aller verifierhttp://forum.wampserver.com/read.php?1,88043
Quelques elements dans le menu de demarrage de WAMP
localhost : page de demarrage de WAMP
phpMyAdmin : page web permettant la gestion des bases de donnees MySQL
Repertoire www : emplacement des projets PHP sur le disque dur
...
H & H: Research and Training 12 / 218
c© Achref EL MOUELHI c©
Introduction
PHP
On peut utiliser un IDE (Environnement de developpement integre)
pour eviter d’utiliser la console et les commandes
car un IDE integre un compilateur lance meme pendant l’ecrituredu code
pour profiter de la coloration syntaxique, l’auto-completion,l’indentation automatique...
pour avoir une bonne structuration du projet
H & H: Research and Training 13 / 218
c© Achref EL MOUELHI c©
Introduction
PHP
Exemple d’IDE pour PHP
Eclipse
Netbeans
WebStorm
PHPStorm
...
H & H: Research and Training 14 / 218
c© Achref EL MOUELHI c©
Introduction
PHP
Eclipse, pourquoi?
open-source
simple
conseille pour les debutants
multi-langage : Java, C++, PHP, Cobol, C#, JavaScript...
H & H: Research and Training 15 / 218
c© Achref EL MOUELHI c©
Introduction
Introduction
Eclipse : telechargement
https://www.eclipse.org/downloads/download.php?file=/oomph/epp/2019-12/R/eclipse-inst-win64.exe
H & H: Research and Training 16 / 218
c© Achref EL MOUELHI c©
Introduction
PHP
H & H: Research and Training 17 / 218
c© Achref EL MOUELHI c©
Introduction
PHP
H & H: Research and Training 17 / 218
c© Achref EL MOUELHI c©
Introduction
PHP
Configuration d’Eclipse
Au demarrage d’Eclipse, choisir le repertoire www de wamp64comme workspace
Aller Window > Preferences, saisir encoding
Verifier dans toutes les sections que l’encodage utilise est l’UTF-8
Valider en cliquant sur Apply and close
H & H: Research and Training 18 / 218
c© Achref EL MOUELHI c©
Avant de commencer
PHP
Les regles de nommage en PHP
Pour les classes : Le Pascal case
Pour les methodes, fonctions et variables : Le snake case
Pour les noms de projets : Le Kebab case
Remarque
Certains anciens elements PHP predefinis ne respectent pas cesregles.
H & H: Research and Training 19 / 218
c© Achref EL MOUELHI c©
Avant de commencer
PHP
Les regles de nommage en PHP
Pour les classes : Le Pascal case
Pour les methodes, fonctions et variables : Le snake case
Pour les noms de projets : Le Kebab case
Remarque
Certains anciens elements PHP predefinis ne respectent pas cesregles.
H & H: Research and Training 19 / 218
c© Achref EL MOUELHI c©
Avant de commencer
PHP
Le code PHP
Les fichiers contenant un code PHP doivent avoir l’extension.php
Un bloc de code PHP est situe entre les deux balises suivantes<?php ... ?>
Une page PHP est une page HTML qui contient une ou plusieursbalises PHP
H & H: Research and Training 20 / 218
c© Achref EL MOUELHI c©
Avant de commencer
PHP
Les instructions
Chaque instruction se termine par ;
Il est possible d’ecrire plusieurs instructions sur une meme ligne(mais ce n’est pas une bonne pratique)
Eclipse nous facilite le formatage et l’indentation du code avec leraccourci CTRL + Shift + F
H & H: Research and Training 21 / 218
c© Achref EL MOUELHI c©
Premier projet PHP
PHP
Comment creer un projet sous Eclipse?
Aller dans File > New > PHP Project
Remplir le champ Project name: avec premier-cours-phppuis cliquer sur Next
Cliquer sur Finish
Remarque
Aller verifier dans le repertoire www qu’un repertoirepremier-cours-php a ete cree
H & H: Research and Training 22 / 218
c© Achref EL MOUELHI c©
Premier projet PHP
PHP
Comment creer un projet sous Eclipse?
Aller dans File > New > PHP Project
Remplir le champ Project name: avec premier-cours-phppuis cliquer sur Next
Cliquer sur Finish
Remarque
Aller verifier dans le repertoire www qu’un repertoirepremier-cours-php a ete cree
H & H: Research and Training 22 / 218
c© Achref EL MOUELHI c©
Premier projet PHP
PHP
Comment creer un fichier PHP?
Faire clic droit sur le projet et aller dans New > PHP File
Dans File name, saisir index.php et cliquer sur Next >
Choisir New simple PHP file
Cliquer sur Finish
H & H: Research and Training 23 / 218
c© Achref EL MOUELHI c©
Premier projet PHP
PHP
Remplacer le contenu d’index.php par le suivant
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Premiere page PHP</title></head><body><?php
echo "Hello world";?></body></html>
H & H: Research and Training 24 / 218
c© Achref EL MOUELHI c©
Premier projet PHP
PHP
Comment voir le resultat de cette page?
Faire clic droit sur le fichier index.php
Choisir Run > PHP Web Application
H & H: Research and Training 25 / 218
c© Achref EL MOUELHI c©
Premier projet PHP
PHP
Fonctions d’affichage : echo et print
utilisables avec et sans parentheses.
echo n’a pas de valeur de retour.
echo sans parenthese peut accepter plusieurs parametressepares par des virgules.
print retourne toujours 1, donc elle peut etre utilisee dans desexpressions.
print n’accepte qu’un seul parametre.
echo est legerement plus rapide que print.
H & H: Research and Training 26 / 218
c© Achref EL MOUELHI c©
Commentaires
PHP
Les commentaires
Trois types de commentaires
Commentaire mono-ligne (C++-style, deconseille)
// ceci est un commentaire sur une seule ligne
Commentaire sur plusieurs lignes (C-style comment)
/* ceci est uncommentairesur trois lignes */
Commentaire pour documentation
/**@author Achref El Mouelhi*/
H & H: Research and Training 27 / 218
c© Achref EL MOUELHI c©
Commentaires
PHP
Les commentaires
Trois types de commentaires
Commentaire mono-ligne (C++-style, deconseille)
// ceci est un commentaire sur une seule ligne
Commentaire sur plusieurs lignes (C-style comment)
/* ceci est uncommentairesur trois lignes */
Commentaire pour documentation
/**@author Achref El Mouelhi*/
H & H: Research and Training 27 / 218
c© Achref EL MOUELHI c©
Commentaires
PHP
Les commentaires
Trois types de commentaires
Commentaire mono-ligne (C++-style, deconseille)
// ceci est un commentaire sur une seule ligne
Commentaire sur plusieurs lignes (C-style comment)
/* ceci est uncommentairesur trois lignes */
Commentaire pour documentation
/**@author Achref El Mouelhi*/
H & H: Research and Training 27 / 218
c© Achref EL MOUELHI c©
Commentaires
PHP
Les commentaires
Trois types de commentaires
Commentaire mono-ligne (C++-style, deconseille)
// ceci est un commentaire sur une seule ligne
Commentaire sur plusieurs lignes (C-style comment)
/* ceci est uncommentairesur trois lignes */
Commentaire pour documentation
/**@author Achref El Mouelhi*/
H & H: Research and Training 27 / 218
c© Achref EL MOUELHI c©
Variables
PHP
Une variable?
Un pointeur vers une zone memoire
Permettant de stocker une ou plusieurs donnees
Pouvant avoir plusieurs valeurs differentes dans un programme
Particularite du langage PHP
PHP est un langage faiblement type.
Les variables sont prefixees par un signe dollar ”$” suivi du nom de lavariable dont le premier caractere est soit une lettre soit un underscore.
Le nom est sensible a la casse.
H & H: Research and Training 28 / 218
c© Achref EL MOUELHI c©
Variables
PHP
Une variable?
Un pointeur vers une zone memoire
Permettant de stocker une ou plusieurs donnees
Pouvant avoir plusieurs valeurs differentes dans un programme
Particularite du langage PHP
PHP est un langage faiblement type.
Les variables sont prefixees par un signe dollar ”$” suivi du nom de lavariable dont le premier caractere est soit une lettre soit un underscore.
Le nom est sensible a la casse.
H & H: Research and Training 28 / 218
c© Achref EL MOUELHI c©
Variables
PHPExemple 1
$x = 5;
Exemple 2
$_x = 5;
Exemple 3
$ma_variable = 5;
Exemple 4
$_ma_variable = 5;
H & H: Research and Training 29 / 218
c© Achref EL MOUELHI c©
Variables
PHPExemple 1
$x = 5;
Exemple 2
$_x = 5;
Exemple 3
$ma_variable = 5;
Exemple 4
$_ma_variable = 5;
H & H: Research and Training 29 / 218
c© Achref EL MOUELHI c©
Variables
PHPExemple 1
$x = 5;
Exemple 2
$_x = 5;
Exemple 3
$ma_variable = 5;
Exemple 4
$_ma_variable = 5;
H & H: Research and Training 29 / 218
c© Achref EL MOUELHI c©
Variables
PHPExemple 1
$x = 5;
Exemple 2
$_x = 5;
Exemple 3
$ma_variable = 5;
Exemple 4
$_ma_variable = 5;
H & H: Research and Training 29 / 218
c© Achref EL MOUELHI c©
Variables
PHP
Quatre types primitifs (scalaires) de variable selon la valeur affectee
int
string
boolean
float (ou double)
H & H: Research and Training 30 / 218
c© Achref EL MOUELHI c©
Variables
PHPExemple avec integer
$var = 5;echo "$var ", gettype($var), "<br>";/* affiche 5 integer */
Exemple avec double
$var = 5.5;echo "$var ", gettype($var), "<br>";/* affiche 5.5 double */
Exemple avec boolean
$var = TRUE;echo "$var ", gettype($var), "<br>";/* affiche 1 boolean */
H & H: Research and Training 31 / 218
c© Achref EL MOUELHI c©
Variables
PHPExemple avec integer
$var = 5;echo "$var ", gettype($var), "<br>";/* affiche 5 integer */
Exemple avec double
$var = 5.5;echo "$var ", gettype($var), "<br>";/* affiche 5.5 double */
Exemple avec boolean
$var = TRUE;echo "$var ", gettype($var), "<br>";/* affiche 1 boolean */
H & H: Research and Training 31 / 218
c© Achref EL MOUELHI c©
Variables
PHPExemple avec integer
$var = 5;echo "$var ", gettype($var), "<br>";/* affiche 5 integer */
Exemple avec double
$var = 5.5;echo "$var ", gettype($var), "<br>";/* affiche 5.5 double */
Exemple avec boolean
$var = TRUE;echo "$var ", gettype($var), "<br>";/* affiche 1 boolean */
H & H: Research and Training 31 / 218
c© Achref EL MOUELHI c©
Variables
PHPExemple avec string
$var = "hello";echo "$var ", gettype($var), "<br>";/* affiche hello string */
Un seul caractere est aussi de type string
$var = "h";echo "$var ", gettype($var), "<br>";/* affiche h string */
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
c© Achref EL MOUELHI c©
Variables
PHPExemple avec string
$var = "hello";echo "$var ", gettype($var), "<br>";/* affiche hello string */
Un seul caractere est aussi de type string
$var = "h";echo "$var ", gettype($var), "<br>";/* affiche h string */
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
c© Achref EL MOUELHI c©
Variables
PHPExemple avec string
$var = "hello";echo "$var ", gettype($var), "<br>";/* affiche hello string */
Un seul caractere est aussi de type string
$var = "h";echo "$var ", gettype($var), "<br>";/* affiche h string */
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
c© Achref EL MOUELHI c©
Variables
PHPRemarques
Pour verifier un type, on peut utiliser la fonction is type($nom variable) :type a remplacer par le type que l’on cherche a verifier
Pour les booleens, il faut utiliser is bool($nom variable).
Ces fonctions retournent 1 si le type de la valeur de la variable passee enparametre est verifie, elles ne retournent rien sinon.
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
c© Achref EL MOUELHI c©
Variables
PHPRemarques
Pour verifier un type, on peut utiliser la fonction is type($nom variable) :type a remplacer par le type que l’on cherche a verifier
Pour les booleens, il faut utiliser is bool($nom variable).
Ces fonctions retournent 1 si le type de la valeur de la variable passee enparametre est verifie, elles ne retournent rien sinon.
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
c© Achref EL MOUELHI c©
Variables
PHP
Explication
PHP convertit une valeur booleenne TRUE en la chaıne ”1” et FALSEen ”” (la chaıne vide), par consequence
echo true affiche 1
echo false n’affiche rien
H & H: Research and Training 34 / 218
c© Achref EL MOUELHI c©
Variables
PHPLa fonction is numeric permet de verifier si le contenu d’une variable est numerique
echo(is_numeric(2));/* affiche 1 */
echo(is_numeric(2.5));/* affiche 1 */
echo(is_numeric("2"));/* affiche 1 */
echo(is_numeric("-2.5"));/* affiche 1 */
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
c© Achref EL MOUELHI c©
Variables
PHP
Autres fonctions is *
is float()
is real() (ou son alias is float())
is object()
is array()
is scalar() pour tester si une variable est de type entier,nombre decimal, chaıne de caracteres ou booleen.
H & H: Research and Training 36 / 218
c© Achref EL MOUELHI c©
Variables
PHP
Utiliser une variable non-declaree et non-initialisee⇒ Undefinedvariable
$x = $y + 1;
echo $x;
H & H: Research and Training 37 / 218
c© Achref EL MOUELHI c©
Variables
PHP
La constante NULL peut-etre utilisee pour creer une variable sansl’initialiser. Cette derniere sera de type null
$var = NULL;
echo $var;/* n’affiche rien */
echo gettype($var);/* affiche NULL */
H & H: Research and Training 38 / 218
c© Achref EL MOUELHI c©
Variables
PHPLa fonction isset peut-etre utilisee pour verifier si une variable est declaree etest differente de NULL
$var = NULL;
echo isset($var);/* n’affiche rien */
$var = 2;echo isset($var);/* affiche 1 */
empty() vs isset() vs is null()
"" "wick" NULL false true 0empty() true false true true false trueisset() true true false true true trueis null() false false true false false false
H & H: Research and Training 39 / 218
c© Achref EL MOUELHI c©
Variables
PHPLa fonction isset peut-etre utilisee pour verifier si une variable est declaree etest differente de NULL
$var = NULL;
echo isset($var);/* n’affiche rien */
$var = 2;echo isset($var);/* affiche 1 */
empty() vs isset() vs is null()
"" "wick" NULL false true 0empty() true false true true false trueisset() true true false true true trueis null() false false true false false false
H & H: Research and Training 39 / 218
c© Achref EL MOUELHI c©
Variables
PHP
La fonction unset peut-etre utilisee pour detruire la variablepassee en parametre
$var = 2;echo isset($var);/* affiche 1 */
unset($var);echo isset($var);/* n’affiche rien */
H & H: Research and Training 40 / 218
c© Achref EL MOUELHI c©
Variables
PHP
Difference entre ”guillemets” et ’apostrophes’ avec echo
$var = 2;echo "Contenu de ma variable : $var"/* affiche Contenu de ma variable : 2 */
echo ’Contenu de ma variable : $var’/* affiche Contenu de ma variable : $var */
H & H: Research and Training 41 / 218
c© Achref EL MOUELHI c©
Quelques operations sur les variables
PHP
Operateurs arithmetiques
= : affectation
+ : addition
- : soustraction
* : multiplication
/ : division
% : reste de la division
** : exponentiel
H & H: Research and Training 42 / 218
c© Achref EL MOUELHI c©
Quelques operations sur les variables
PHP
Quelques exemples avec l’addition
$x = 1;$y = 3;$z = ’8’;$t = "2";$n = 2.5;echo($x + $y ."<br>"); /* 4 */echo($x + $z ."<br>"); /* 9 */echo($x + $t ."<br>"); /* 3 */echo($x + $y + $z ."<br>"); /* 12 */echo($z + $y + $x ."<br>"); /* 12 */echo($x + $n ."<br>"); /* 3.5 */
H & H: Research and Training 43 / 218
c© Achref EL MOUELHI c©
Quelques operations sur les variables
PHP
Quelques raccourcis
$i++; ≡ $i = $i + 1;
$i--; ≡ $i = $i - 1;
$i += 2; ≡ $i = $i + 2;
$i -= 3; ≡ $i = $i - 3;
$i *= 2; ≡ $i = $i * 2;
$i /= 3; ≡ $i = $i / 3;
$i %= 5; ≡ $i = $i % 5;
H & H: Research and Training 44 / 218
c© Achref EL MOUELHI c©
Quelques operations sur les variables
PHP
Exemple de post-incrementation
$i = 2;$j = $i++;echo($i); /* affiche 3 */echo($j); /* affiche 2 */
Exemple de pre-incrementation
$i = 2;$j = ++$i;echo($i); /* affiche 3 */echo($j); /* affiche 3 */
H & H: Research and Training 45 / 218
c© Achref EL MOUELHI c©
Quelques operations sur les variables
PHP
Exemple de post-incrementation
$i = 2;$j = $i++;echo($i); /* affiche 3 */echo($j); /* affiche 2 */
Exemple de pre-incrementation
$i = 2;$j = ++$i;echo($i); /* affiche 3 */echo($j); /* affiche 3 */
H & H: Research and Training 45 / 218
c© Achref EL MOUELHI c©
Quelques operations sur les variables
PHP
Pour permuter le contenu de deux variables, on peut utiliser ladecomposition
$a = 2;$b = 0;[$a, $b] = [$b, $a];echo $a . " " . $b;/* affiche 0 2 */
H & H: Research and Training 46 / 218
c© Achref EL MOUELHI c©
Quelques operations sur les variables
PHP
Pour permuter le contenu de deux variables, on peut utiliser ladecomposition
$a = 2;$b = 0;[$a, $b] = [$b, $a];echo $a . " " . $b;/* affiche 0 2 */
H & H: Research and Training 46 / 218
c© Achref EL MOUELHI c©
Quelques operations sur les variables
PHP
Etant donnees les deux variables suivantes
$heure = ’03:40:52’;$seconds = 200;
Exercice
Ecrire un script PHP qui permet d’ajouter le nombre de secondesdefini dans $seconds a l’heure definie dans la chaıne de caractere$heure.
H & H: Research and Training 47 / 218
c© Achref EL MOUELHI c©
Quelques operations sur les variables
PHP
Etant donnees les deux variables suivantes
$heure = ’03:40:52’;$seconds = 200;
Exercice
Ecrire un script PHP qui permet d’ajouter le nombre de secondesdefini dans $seconds a l’heure definie dans la chaıne de caractere$heure.
H & H: Research and Training 47 / 218
c© Achref EL MOUELHI c©
Quelques operations sur les variables
PHP
Correction
<?php$heure = ’03:40:52’;$secondes = 200;$h = substr($heure, 0, 2);$m = substr($heure, 3, 2);$s = substr($heure, 6);$converted = $h * 3600 + $m * 60 + $s + $secondes;$new_hours = (int) ($converted / 3600);$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
c© Achref EL MOUELHI c©
Fonctions utiles pour les chaınes de caracteres
PHP
L’operateur . pour concatener deux chaınes de caracteres
$string = "bon";$string2 = "jour";$str_concat = $string . $string2;echo $str_concat;/* affiche bonjour */
L’operateur .= permet de faire concatenation + affectation
$string = "bon";$string2 = "jour";$string .= $string2;echo $string;/* affiche bonjour */
H & H: Research and Training 49 / 218
c© Achref EL MOUELHI c©
Fonctions utiles pour les chaınes de caracteres
PHP
L’operateur . pour concatener deux chaınes de caracteres
$string = "bon";$string2 = "jour";$str_concat = $string . $string2;echo $str_concat;/* affiche bonjour */
L’operateur .= permet de faire concatenation + affectation
$string = "bon";$string2 = "jour";$string .= $string2;echo $string;/* affiche bonjour */
H & H: Research and Training 49 / 218
c© Achref EL MOUELHI c©
Fonctions utiles pour les chaınes de caracteres
PHPLa fonction strcmp() pour comparer deux chaınes de caracteres
$string = "bon";$string2 = "jour";
echo strcmp($string, $string2);/* affiche -1 */
echo strcmp($string2, $string);/* affiche 1 */
echo strcmp($string, $string);/* affiche 0 */
Pour comparer deux chaınes de caracteres, on peut aussi utiliser l’operateur ==
echo $string == $string;/* affiche 1 */
echo $string == $string2;/* n’affiche rien */
H & H: Research and Training 50 / 218
c© Achref EL MOUELHI c©
Fonctions utiles pour les chaınes de caracteres
PHPLa fonction strcmp() pour comparer deux chaınes de caracteres
$string = "bon";$string2 = "jour";
echo strcmp($string, $string2);/* affiche -1 */
echo strcmp($string2, $string);/* affiche 1 */
echo strcmp($string, $string);/* affiche 0 */
Pour comparer deux chaınes de caracteres, on peut aussi utiliser l’operateur ==
echo $string == $string;/* affiche 1 */
echo $string == $string2;/* n’affiche rien */
H & H: Research and Training 50 / 218
c© Achref EL MOUELHI c©
Fonctions utiles pour les chaınes de caracteres
PHPFonctions utiles pour les chaınes de caracteres
strlen() : la longueur de la chaıne
strtoupper() : pour convertir une chaıne de caracteres en majuscule
strtolower() : pour convertir une chaıne de caracteres en minuscule
trim() : pour supprimer les espaces au debut et a la fin (autres variantes : ltrim() etrtrim())
substr() : pour extraire une sous-chaıne de caracteres
strpos() : pour retourner la position d’une sous-chaıne dans une chaıne, -1 sinon.
strcmp($str,$str2) : pour comparer str a str2. Elle retourne 0 en cas d’egalite, 1si le code ASCII du premier caractere different de la premiere chaıne est superieur a celuide la deuxieme chaıne, -1 sinon.
str split() : pour transformer une chaıne de caracteres en tableau de sous-chaınes decaracteres
...
H & H: Research and Training 51 / 218
c© Achref EL MOUELHI c©
Fonctions utiles pour les chaınes de caracteres
PHP
Pour connaıtre la longueur d’une chaıne
$str = "bonjour";echo(strlen($str));/* affiche 7 */
Pour supprimer les espaces au debut et a la fin de la chaıne
$str = " bon jour ";echo(strlen($str));/* affiche 12 */
$sans_espace = trim($str);echo(strlen($sans_espace));/* affiche 8 */
H & H: Research and Training 52 / 218
c© Achref EL MOUELHI c©
Fonctions utiles pour les chaınes de caracteres
PHP
Pour connaıtre la longueur d’une chaıne
$str = "bonjour";echo(strlen($str));/* affiche 7 */
Pour supprimer les espaces au debut et a la fin de la chaıne
$str = " bon jour ";echo(strlen($str));/* affiche 12 */
$sans_espace = trim($str);echo(strlen($sans_espace));/* affiche 8 */
H & H: Research and Training 52 / 218
c© Achref EL MOUELHI c©
Fonctions utiles pour les chaınes de caracteres
PHPPour extraire une sous-chaıne a partir de l’indice 3 jusqu’a la fin
$str = "bonjour";echo(substr($str, 3));/* affiche jour */
On peut aussi preciser le nombre de caractere a extraire
$str = "bonjour";echo(substr($str, 3, 2));/* affiche jo */
Pour extraire les trois derniers caracteres, on utilise une valeur negative
$str = "bonjour";echo(substr($str, -3)); /* eq substr($str, 4) avec 4 = length - 3 *//* affiche our */
H & H: Research and Training 53 / 218
c© Achref EL MOUELHI c©
Fonctions utiles pour les chaınes de caracteres
PHPPour extraire une sous-chaıne a partir de l’indice 3 jusqu’a la fin
$str = "bonjour";echo(substr($str, 3));/* affiche jour */
On peut aussi preciser le nombre de caractere a extraire
$str = "bonjour";echo(substr($str, 3, 2));/* affiche jo */
Pour extraire les trois derniers caracteres, on utilise une valeur negative
$str = "bonjour";echo(substr($str, -3)); /* eq substr($str, 4) avec 4 = length - 3 *//* affiche our */
H & H: Research and Training 53 / 218
c© Achref EL MOUELHI c©
Fonctions utiles pour les chaınes de caracteres
PHPPour extraire une sous-chaıne a partir de l’indice 3 jusqu’a la fin
$str = "bonjour";echo(substr($str, 3));/* affiche jour */
On peut aussi preciser le nombre de caractere a extraire
$str = "bonjour";echo(substr($str, 3, 2));/* affiche jo */
Pour extraire les trois derniers caracteres, on utilise une valeur negative
$str = "bonjour";echo(substr($str, -3)); /* eq substr($str, 4) avec 4 = length - 3 *//* affiche our */
H & H: Research and Training 53 / 218
c© Achref EL MOUELHI c©
Fonctions utiles pour les chaınes de caracteres
PHPPour determiner l’indice d’une sous-chaıne dans une chaıne de caracteres
$str = "Bonjour les bons jours";echo(strpos($str, "bon"));/* affiche 12 */
Pour une recherche insensible a la casse
$str = "Bonjour les bons jours";echo(stripos($str, "bon"));/* affiche 0 */
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
c© Achref EL MOUELHI c©
Fonctions utiles pour les chaınes de caracteres
PHPPour determiner l’indice d’une sous-chaıne dans une chaıne de caracteres
$str = "Bonjour les bons jours";echo(strpos($str, "bon"));/* affiche 12 */
Pour une recherche insensible a la casse
$str = "Bonjour les bons jours";echo(stripos($str, "bon"));/* affiche 0 */
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
c© Achref EL MOUELHI c©
Fonctions utiles pour les chaınes de caracteres
PHPPour determiner l’indice d’une sous-chaıne dans une chaıne de caracteres
$str = "Bonjour les bons jours";echo(strpos($str, "bon"));/* affiche 12 */
Pour une recherche insensible a la casse
$str = "Bonjour les bons jours";echo(stripos($str, "bon"));/* affiche 0 */
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
c© Achref EL MOUELHI c©
Fonctions utiles pour les chaınes de caracteres
PHP
Pour determiner la derniere occurrence d’une sous-chaıne dansune chaıne de caracteres
$str = "Bonjour les bons jours";echo(strrpos($str, "jour"));/* affiche 17 */
Pour determiner la derniere occurrence d’une sous-chaıne dansune chaıne de caracteres (insensible a la casse)
$str = "Bonjour les bons jours";echo(strripos($str, "bon"));/* affiche 12 */
H & H: Research and Training 55 / 218
c© Achref EL MOUELHI c©
Fonctions utiles pour les chaınes de caracteres
PHP
Pour determiner la derniere occurrence d’une sous-chaıne dansune chaıne de caracteres
$str = "Bonjour les bons jours";echo(strrpos($str, "jour"));/* affiche 17 */
Pour determiner la derniere occurrence d’une sous-chaıne dansune chaıne de caracteres (insensible a la casse)
$str = "Bonjour les bons jours";echo(strripos($str, "bon"));/* affiche 12 */
H & H: Research and Training 55 / 218
c© Achref EL MOUELHI c©
Fonctions utiles pour les chaınes de caracteres
PHP
Pour acceder a un caractere d’indice i dans une chaıne decaracteres
// soit directement via l’indiceecho($str[i]);
Ou
/* soit en faisant l’extraction d’une sous chaine decaracteres */
echo(substr($str, i, 1));
H & H: Research and Training 56 / 218
c© Achref EL MOUELHI c©
Fonctions utiles pour les chaınes de caracteres
PHP
Pour acceder a un caractere d’indice i dans une chaıne decaracteres
// soit directement via l’indiceecho($str[i]);
Ou
/* soit en faisant l’extraction d’une sous chaine decaracteres */
echo(substr($str, i, 1));
H & H: Research and Training 56 / 218
c© Achref EL MOUELHI c©
Fonctions utiles pour les chaınes de caracteres
PHP
Etant donnees les deux chaınes de caracteres suivantes
$ma_chaine = "Hello les holoulos";$motif = "lo";
Exercice
En utilisant les fonctions sur les chaınes de caracteres, ecrire un scriptPHP qui permet de retourner la position de l’avant derniere occurrencede $motif dans $ma chaine.
H & H: Research and Training 57 / 218
c© Achref EL MOUELHI c©
Fonctions utiles pour les chaınes de caracteres
PHP
Etant donnees les deux chaınes de caracteres suivantes
$ma_chaine = "Hello les holoulos";$motif = "lo";
Exercice
En utilisant les fonctions sur les chaınes de caracteres, ecrire un scriptPHP qui permet de retourner la position de l’avant derniere occurrencede $motif dans $ma chaine.
H & H: Research and Training 57 / 218
c© Achref EL MOUELHI c©
Fonctions utiles pour les chaınes de caracteres
PHP
Correction
<?php$ma_chaine = "Hello les holoulos";$motif = ’lo’;$sans_dernier_motif = substr($ma_chaine, 0,
strrpos($ma_chaine, $motif));echo "$sans_dernier_motif <br>";echo strrpos ($sans_dernier_motif, $motif);
?>
H & H: Research and Training 58 / 218
c© Achref EL MOUELHI c©
Fonctions utiles pour les chaınes de caracteres
PHP
Etant donnees les deux chaınes de caracteres suivantes
$ma_chaine = "Hello les holoulos";$motif = "lo";
Exercice
En utilisant les fonctions sur les chaınes de caracteres, ecrire un scriptPHP qui permet de supprimer l’avant derniere occurrence de $motifdans $ma chaine.
H & H: Research and Training 59 / 218
c© Achref EL MOUELHI c©
Fonctions utiles pour les chaınes de caracteres
PHP
Etant donnees les deux chaınes de caracteres suivantes
$ma_chaine = "Hello les holoulos";$motif = "lo";
Exercice
En utilisant les fonctions sur les chaınes de caracteres, ecrire un scriptPHP qui permet de supprimer l’avant derniere occurrence de $motifdans $ma chaine.
H & H: Research and Training 59 / 218
c© Achref EL MOUELHI c©
Fonctions utiles pour les chaınes de caracteres
PHP
Correction
<?php$ma_chaine = "Hello les holoulos";$motif = ’lo’;$sans_dernier_motif = substr($ma_chaine, 0, strrpos($ma_chaine,
$motif));
$pos_avant_dernier = strrpos($sans_dernier_motif, $motif);$avant = substr($ma_chaine, 0, $pos_avant_dernier);$apres = substr($ma_chaine, $pos_avant_dernier + strlen($motif));$ma_chaine = $avant . $apres;echo $ma_chaine;
?>
H & H: Research and Training 60 / 218
c© Achref EL MOUELHI c©
Fonctions utiles pour les chaınes de caracteres
PHP
La fonction nl2br permet de remplacer \n et \r par la balise<br>
$bonjour = "bonjour \n john \n wick \n\r ou \r\nKeanu Reeves" ;
echo nl2br($bonjour);
/* le code source generebonjour <br />john <br />wick <br />ou <br />Keanu Reeves
*/
H & H: Research and Training 61 / 218
c© Achref EL MOUELHI c©
Fonctions utiles pour les chaınes de caracteres
PHP
Pour convertir une chaıne en entier (premiere solution avec lecast)
$a = ’4’;$b = (int)$a;echo $b . " " . gettype($b);/* affiche 4 integer */
Une deuxieme solution avec la fonction intval()
$a = ’4’;$b = intval($a);echo $b . " " . gettype($b);/* affiche 4 integer */
H & H: Research and Training 62 / 218
c© Achref EL MOUELHI c©
Fonctions utiles pour les chaınes de caracteres
PHP
Pour convertir une chaıne en entier (premiere solution avec lecast)
$a = ’4’;$b = (int)$a;echo $b . " " . gettype($b);/* affiche 4 integer */
Une deuxieme solution avec la fonction intval()
$a = ’4’;$b = intval($a);echo $b . " " . gettype($b);/* affiche 4 integer */
H & H: Research and Training 62 / 218
c© Achref EL MOUELHI c©
Fonctions utiles pour les chaınes de caracteres
Pour convertir une chaıne en double (premiere solution avec le cast)
$a = ’4.5’;$b = (float)$a;echo $b . " " . gettype($b);/* affiche 4.5 double */
Pour faire le cast, on peut aussi utiliser (double)
$a = ’4.5’;$b = (double)$a;echo $b . " " . gettype($b);/* affiche 4.5 double */
Une deuxieme 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
c© Achref EL MOUELHI c©
Fonctions utiles pour les chaınes de caracteres
Pour convertir une chaıne en double (premiere solution avec le cast)
$a = ’4.5’;$b = (float)$a;echo $b . " " . gettype($b);/* affiche 4.5 double */
Pour faire le cast, on peut aussi utiliser (double)
$a = ’4.5’;$b = (double)$a;echo $b . " " . gettype($b);/* affiche 4.5 double */
Une deuxieme 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
c© Achref EL MOUELHI c©
Fonctions utiles pour les chaınes de caracteres
Pour convertir une chaıne en double (premiere solution avec le cast)
$a = ’4.5’;$b = (float)$a;echo $b . " " . gettype($b);/* affiche 4.5 double */
Pour faire le cast, on peut aussi utiliser (double)
$a = ’4.5’;$b = (double)$a;echo $b . " " . gettype($b);/* affiche 4.5 double */
Une deuxieme 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
c© Achref EL MOUELHI c©
Fonctions utiles pour les chaınes de caracteres
PHP
La fonction eval execute une chaıne de caractere passee enparametre comme un script PHP
$str = "echo 2 * 3;";eval($str);/* affiche 6 */
H & H: Research and Training 64 / 218
c© Achref EL MOUELHI c©
Conditions et boucles if
PHP
Executer si une condition est vraie
if (condition) {...
}
Pour les conditions, on utilise des operateurs de comparaison
H & H: Research and Training 65 / 218
c© Achref EL MOUELHI c©
Conditions et boucles if
PHP
Executer si une condition est vraie
if (condition) {...
}
Pour les conditions, on utilise des operateurs de comparaison
H & H: Research and Training 65 / 218
c© Achref EL MOUELHI c©
Conditions et boucles if
PHP
Operateurs de comparaison
== : pour tester l’egalite des valeurs
!= : pour tester l’inegalite des valeurs
=== : pour tester l’egalite des valeurs et des types
!== : pour tester l’inegalite des valeurs ou des types
> : superieur a
< : inferieur a
>= : superieur ou egal a
<= : inferieur ou egal a
H & H: Research and Training 66 / 218
c© Achref EL MOUELHI c©
Conditions et boucles if
PHP
Exemple
$x = 3;if ($x >= 0) {
echo $x . " est positif";}
H & H: Research and Training 67 / 218
c© Achref EL MOUELHI c©
Conditions et boucles if ... else
PHP
Executer un premier bloc si une condition est vraie, un deuxieme sinon (le blocelse)
if (condition1) {...
} else {...
}
Exemple
$x = 3;if ($x > 0) {echo $x . " est strictement positif";
} else {echo $x . " est negatif ou nul";
}
H & H: Research and Training 68 / 218
c© Achref EL MOUELHI c©
Conditions et boucles if ... else
PHP
Executer un premier bloc si une condition est vraie, un deuxieme sinon (le blocelse)
if (condition1) {...
} else {...
}
Exemple
$x = 3;if ($x > 0) {echo $x . " est strictement positif";
} else {echo $x . " est negatif ou nul";
}
H & H: Research and Training 68 / 218
c© Achref EL MOUELHI c©
Conditions et boucles if ... elseif ... else
PHP
On peut enchaıner les conditions avec else if (et avoir untroisieme bloc voire ... un nieme)
if (condition1) {...
} else if (condition2) {...
}...else {
...}
On peut ecrire elseif ou else if.
H & H: Research and Training 69 / 218
c© Achref EL MOUELHI c©
Conditions et boucles if ... elseif ... else
PHP
On peut enchaıner les conditions avec else if (et avoir untroisieme bloc voire ... un nieme)
if (condition1) {...
} else if (condition2) {...
}...else {
...}
On peut ecrire elseif ou else if.
H & H: Research and Training 69 / 218
c© Achref EL MOUELHI c©
Conditions et boucles if ... elseif ... else
PHP
Exemple
$x = -3;if ($x > 0) {echo $x . " est strictement positif";
} else if ($x < 0) {echo $x . " est strictement negatif";
} else {echo $x . " est nul";
}
H & H: Research and Training 70 / 218
c© Achref EL MOUELHI c©
Conditions et boucles if ... elseif ... else
PHP
Exercice
Ecrire un script PHP qui permet de determiner si une chaıne decaracteres $ma chaine est vide ou si elle contient un nombre pair ouimpair de caracteres.
H & H: Research and Training 71 / 218
c© Achref EL MOUELHI c©
Conditions et boucles if ... elseif ... else
PHP
Correction
<?php$ma_chaine = "";$longueur = strlen($ma_chaine);if ($longueur == 0) {
echo "’$ma_chaine’ est vide";} else if (0 == $longueur % 2) {
echo "’$ma_chaine’ a un nombre pair de carcteres";} else {
echo "’$ma_chaine’ a un nombre impair de carcteres";}
?>
H & H: Research and Training 72 / 218
c© Achref EL MOUELHI c©
Conditions et boucles if ... elseif ... else
PHP
Etant donnees les deux chaınes de caracteres suivantes
$ma_chaine = "Hello les holoulos";$motif = "lo";
Exercice
Ecrire un script PHP qui permet de verifier si une chaıne de caracteres$ma chaine contient deux occurrences de $motif.
H & H: Research and Training 73 / 218
c© Achref EL MOUELHI c©
Conditions et boucles if ... elseif ... else
PHP
Etant donnees les deux chaınes de caracteres suivantes
$ma_chaine = "Hello les holoulos";$motif = "lo";
Exercice
Ecrire un script PHP qui permet de verifier si une chaıne de caracteres$ma chaine contient deux occurrences de $motif.
H & H: Research and Training 73 / 218
c© Achref EL MOUELHI c©
Conditions et boucles if ... elseif ... else
PHP
Correction
<?phpif (strrpos($ma_chaine, $motif) != strpos($ma_chaine, $motif)
) {echo "’$ma_chaine’ contient au moins deux occurences de ’
$motif’";} else {echo "’$ma_chaine’ ne pas contient deux occurences de ’
$motif’";}
?>
H & H: Research and Training 74 / 218
c© Achref EL MOUELHI c©
Conditions et boucles if ... elseif ... else
PHP
Operateurs logiques
&& ou and : et
|| ou or : ou
! : non
xor : ou exclusif
Tester plusieurs conditions (en utilisant des operateurs logiques)
if (condition1 && !condition2 || condition3) {...
}[else ...]
H & H: Research and Training 75 / 218
c© Achref EL MOUELHI c©
Conditions et boucles if ... elseif ... else
PHP
Operateurs logiques
&& ou and : et
|| ou or : ou
! : non
xor : ou exclusif
Tester plusieurs conditions (en utilisant des operateurs logiques)
if (condition1 && !condition2 || condition3) {...
}[else ...]
H & H: Research and Training 75 / 218
c© Achref EL MOUELHI c©
Conditions et boucles if ... elseif ... else
PHP
Etant donnees les deux variables suivantes
$x = 2;$y = 3;
Exercice
Sans calculer la somme, ecrire un script PHP qui permet dedeterminer si le resultat sera pair ou impair.
H & H: Research and Training 76 / 218
c© Achref EL MOUELHI c©
Conditions et boucles if ... elseif ... else
PHP
Etant donnees les deux variables suivantes
$x = 2;$y = 3;
Exercice
Sans calculer la somme, ecrire un script PHP qui permet dedeterminer si le resultat sera pair ou impair.
H & H: Research and Training 76 / 218
c© Achref EL MOUELHI c©
Conditions et boucles if ... elseif ... else
PHPPremiere solution
<?phpif ($var1 % 2 != 0 xor $var2 % 2 != 0) {
echo "impair";} else {
echo "pair";}
?>
Deuxieme solution
<?phpif ($x % 2 == $y % 2) {
echo "le resultat est pair";} else {
echo "le resultat est impair";}
?>
H & H: Research and Training 77 / 218
c© Achref EL MOUELHI c©
Conditions et boucles if ... elseif ... else
PHPPremiere solution
<?phpif ($var1 % 2 != 0 xor $var2 % 2 != 0) {
echo "impair";} else {
echo "pair";}
?>
Deuxieme solution
<?phpif ($x % 2 == $y % 2) {
echo "le resultat est pair";} else {
echo "le resultat est impair";}
?>
H & H: Research and Training 77 / 218
c© Achref EL MOUELHI c©
Conditions et boucles switch
PHPStructure conditionnelle switch : syntaxe
switch ($nom_ariable) {case constante-1:groupe-instructions-1;break;
case constante-2:groupe-instructions-2;break;
...case constante-N:groupe-instructions-N;break;
default:groupe-instructions-par-defaut;
}
H & H: Research and Training 78 / 218
c© Achref EL MOUELHI c©
Conditions et boucles switch
PHP
Remarques
Le switch permet seulement de tester l’egalite
Le break permet de quitter le switch une fois un bloc caseexecute
Il est possible de regrouper plusieurs case
Le bloc default est facultatif, il sera executer si la valeur de lavariable ne correspond a aucune constante de case
H & H: Research and Training 79 / 218
c© Achref EL MOUELHI c©
Conditions et boucles switch
PHP
Structure conditionnelle avec switch
$x = 5;switch ($x) {
case 1:echo("un");break;
case 2:echo("deux");break;
case 3:echo("trois");break;
default:echo("autre");
}
H & H: Research and Training 80 / 218
c© Achref EL MOUELHI c©
Conditions et boucles switch
PHPUn multi-case pour un seul traitement
$x = 5;switch ($x) {case 1:case 2:
echo("un ou deux");break;
case 3:echo("trois");break;
case 4:case 5:
echo("quatre ou cinq");break;
default:echo("autre");
}
H & H: Research and Training 81 / 218
c© Achref EL MOUELHI c©
Conditions et boucles switch
PHP
Si on supprime un break
$x = "2";switch ($x) {
case "1":echo("un");break;
case "2":echo("deux");
case "3":echo("trois");break;
default:echo("autre");
}/* affiche deuxtrois */
H & H: Research and Training 82 / 218
c© Achref EL MOUELHI c©
Conditions et boucles switch
PHP
Exercice
Ecrire un script PHP qui permet d’afficher le nombre de jours d’unmois selon son indice.
H & H: Research and Training 83 / 218
c© Achref EL MOUELHI c©
Conditions et boucles switch
Correction
$indice_mois = 1;switch ($indice_mois) {
case ’1’:case ’3’:case ’5’:case ’7’:case ’8’:case ’10’:case ’12’:
echo 31;break;
case ’4’:case ’6’:case ’9’:case ’11’:
echo 30;break;
case ’2’:echo ’28 ou 29’;break;
default:echo "erreur";break;
}
H & H: Research and Training 84 / 218
c© Achref EL MOUELHI c©
Conditions et boucles Elvis operator
PHP
Simplifions l’ecriture avec l’expression ternaire (Elvis operator)
$x = 2;$type = ($x % 2 == 0) ? "pair" : "impair";echo($type);/* affiche pair */
La version simplifiee (sans else sans if)
$x = 2;$type = ($x % 2 != 0) ?: "pair";echo($type);/* affiche pair */
H & H: Research and Training 85 / 218
c© Achref EL MOUELHI c©
Conditions et boucles Elvis operator
PHP
Simplifions l’ecriture avec l’expression ternaire (Elvis operator)
$x = 2;$type = ($x % 2 == 0) ? "pair" : "impair";echo($type);/* affiche pair */
La version simplifiee (sans else sans if)
$x = 2;$type = ($x % 2 != 0) ?: "pair";echo($type);/* affiche pair */
H & H: Research and Training 85 / 218
c© Achref EL MOUELHI c©
Conditions et boucles Null coalescing
PHP
Pour tester si une variable existe ou si elle a une valeur differentede null, on peut utiliser Null coalescing (??)
$result = $y ?? 5;echo($result);/* affiche 5 car $y n’existe pas */
$x = null;$result = $x ?? 5;echo($result);/* affiche 5 car $x a la valeur null*/
H & H: Research and Training 86 / 218
c© Achref EL MOUELHI c©
Conditions et boucles while
PHP
Boucle while : a chaque iteration on teste si la condition estvraie avant d’acceder aux traitements
while (condition[s]) {...
}
Attention aux boucles infinies, verifier que la condition d’arret sera bienatteinte apres un certain nombre d’iterations.
H & H: Research and Training 87 / 218
c© Achref EL MOUELHI c©
Conditions et boucles while
PHP
Boucle while : a chaque iteration on teste si la condition estvraie avant d’acceder aux traitements
while (condition[s]) {...
}
Attention aux boucles infinies, verifier que la condition d’arret sera bienatteinte apres un certain nombre d’iterations.
H & H: Research and Training 87 / 218
c© Achref EL MOUELHI c©
Conditions et boucles while
PHP
Exemple
$i = 0;while ($i < 5) {echo $i, "<br>";$i++;
}
Le resultat est
01234
H & H: Research and Training 88 / 218
c© Achref EL MOUELHI c©
Conditions et boucles while
PHP
Exemple
$i = 0;while ($i < 5) {echo $i, "<br>";$i++;
}
Le resultat est
01234
H & H: Research and Training 88 / 218
c© Achref EL MOUELHI c©
Conditions et boucles while
PHP
Etant donnee la chaıne de caracteres suivante
$ma_chaine = "hello les holoulos";
Exercice
Ecrire un script PHP qui permet de remplacer chaque caractered’indice impair de la chaine de caractere $ma chaine par sonequivalent en majuscule.
H & H: Research and Training 89 / 218
c© Achref EL MOUELHI c©
Conditions et boucles while
PHP
Etant donnee la chaıne de caracteres suivante
$ma_chaine = "hello les holoulos";
Exercice
Ecrire un script PHP qui permet de remplacer chaque caractered’indice impair de la chaine de caractere $ma chaine par sonequivalent en majuscule.
H & H: Research and Training 89 / 218
c© Achref EL MOUELHI c©
Conditions et boucles while
PHP
Correction
<?php$i = 0;while ($i < strlen($ma_chaine)) {
$ma_chaine[$i] = strtoupper($ma_chaine[$i]);$i += 2;
}echo $ma_chaine;
?>
H & H: Research and Training 90 / 218
c© Achref EL MOUELHI c©
Conditions et boucles do ... while
PHP
La Boucle do ... while execute le bloc au moins une fois ensuiteelle verifie la condition
do {...
}while (condition[s]);
Attention aux boucles infinies, verifier que la condition d’arret sera bienatteinte apres un certain nombre d’iterations.
H & H: Research and Training 91 / 218
c© Achref EL MOUELHI c©
Conditions et boucles do ... while
PHP
La Boucle do ... while execute le bloc au moins une fois ensuiteelle verifie la condition
do {...
}while (condition[s]);
Attention aux boucles infinies, verifier que la condition d’arret sera bienatteinte apres un certain nombre d’iterations.
H & H: Research and Training 91 / 218
c© Achref EL MOUELHI c©
Conditions et boucles do ... while
PHP
Exemple
$i = 0;do {echo $i, "<br>";$i++;
} while ($i < 5);
Le resultat est
01234
H & H: Research and Training 92 / 218
c© Achref EL MOUELHI c©
Conditions et boucles do ... while
PHP
Exemple
$i = 0;do {echo $i, "<br>";$i++;
} while ($i < 5);
Le resultat est
01234
H & H: Research and Training 92 / 218
c© Achref EL MOUELHI c©
Conditions et boucles do ... while
PHP
Etant donnee la chaıne de caracteres suivante
$ma_chaine = "hello les holoulos";
Exercice
Ecrire un script PHP qui permet de compter le nombre de voyellesdans la chaine de caractere $ma chaine.
H & H: Research and Training 93 / 218
c© Achref EL MOUELHI c©
Conditions et boucles do ... while
PHP
Etant donnee la chaıne de caracteres suivante
$ma_chaine = "hello les holoulos";
Exercice
Ecrire un script PHP qui permet de compter le nombre de voyellesdans la chaine de caractere $ma chaine.
H & H: Research and Training 93 / 218
c© Achref EL MOUELHI c©
Conditions et boucles do ... while
PHP
Correction
<?php$ma_chaine = "hello les holoulos";$voyelles = "aeouiy";$nbr_voyelles = 0;$i = 0;do {
if (strpos($voyelles, strtolower($ma_chaine[$i])) !== false) {$nbr_voyelles++;
}$i++;
} while ($i < strlen($ma_chaine));echo $nbr_voyelles;
?>
H & H: Research and Training 94 / 218
c© Achref EL MOUELHI c©
Conditions et boucles for
PHP
Boucle for
for (initialisation; condition[s]; incrementation) {...
}
Attention aux boucles infinies si vous modifiez la valeur du compteur al’interieur de la boucle.
H & H: Research and Training 95 / 218
c© Achref EL MOUELHI c©
Conditions et boucles for
PHP
Boucle for
for (initialisation; condition[s]; incrementation) {...
}
Attention aux boucles infinies si vous modifiez la valeur du compteur al’interieur de la boucle.
H & H: Research and Training 95 / 218
c© Achref EL MOUELHI c©
Conditions et boucles for
PHP
Exemple
for ($i = 0; $i < 5; $i++) {echo $i, "<br>";
}
Le resultat est
01234
H & H: Research and Training 96 / 218
c© Achref EL MOUELHI c©
Conditions et boucles for
PHP
Exemple
for ($i = 0; $i < 5; $i++) {echo $i, "<br>";
}
Le resultat est
01234
H & H: Research and Training 96 / 218
c© Achref EL MOUELHI c©
Conditions et boucles for
Exercice
Ecrire un code PHP qui permet d’afficher les nombres pairs compris entre 0 et 10.
Premiere solution
for ($i = 0; $i < 10; $i++) {if ($i % 2 == 0) {
echo $i, "<br>";}
}
Deuxieme solution
for ($i = 0; $i < 10; $i += 2) {echo $i, "<br>";
}
H & H: Research and Training 97 / 218
c© Achref EL MOUELHI c©
Conditions et boucles for
Exercice
Ecrire un code PHP qui permet d’afficher les nombres pairs compris entre 0 et 10.
Premiere solution
for ($i = 0; $i < 10; $i++) {if ($i % 2 == 0) {echo $i, "<br>";
}}
Deuxieme solution
for ($i = 0; $i < 10; $i += 2) {echo $i, "<br>";
}
H & H: Research and Training 97 / 218
c© Achref EL MOUELHI c©
Conditions et boucles for
Exercice
Ecrire un code PHP qui permet d’afficher les nombres pairs compris entre 0 et 10.
Premiere solution
for ($i = 0; $i < 10; $i++) {if ($i % 2 == 0) {echo $i, "<br>";
}}
Deuxieme solution
for ($i = 0; $i < 10; $i += 2) {echo $i, "<br>";
}
H & H: Research and Training 97 / 218
c© Achref EL MOUELHI c©
Conditions et boucles for
PHP
Etant donnee la chaıne de caracteres suivante
$ma_chaine = "hello les holoulos. C’est toujours leconfinement.";
Exercice
Ecrire un script PHP qui permet de compter le nombre de phrases etcelui de mots de la chaine de caractere $ma chaine.
H & H: Research and Training 98 / 218
c© Achref EL MOUELHI c©
Conditions et boucles for
PHP
Etant donnee la chaıne de caracteres suivante
$ma_chaine = "hello les holoulos. C’est toujours leconfinement.";
Exercice
Ecrire un script PHP qui permet de compter le nombre de phrases etcelui de mots de la chaine de caractere $ma chaine.
H & H: Research and Training 98 / 218
c© Achref EL MOUELHI c©
Conditions et boucles for
PHP
Correction
<?php$ma_chaine = "hello les holoulos. C’est toujours
le confinement.";$nbr_phrases = 0;$nbr_mots = 1;for ($i=0; $i < strlen($ma_chaine); $i++) {
if($ma_chaine[$i]== " ")$nbr_mots ++;if ($ma_chaine[$i] == ".")
$nbr_phrases++;}echo "#phrases = $nbr_phrases <br> #mots =
$nbr_mots";?>
H & H: Research and Training 99 / 218
c© Achref EL MOUELHI c©
Conditions et boucles for
PHP
Etant donnee la variable suivante
$nombre = 5;
Exercice
Ecrire un script PHP qui permet d’afficher les tables d’addition,soustraction, multiplication et division de $nombre.
H & H: Research and Training 100 / 218
c© Achref EL MOUELHI c©
Conditions et boucles for
PHP
Etant donnee la variable suivante
$nombre = 5;
Exercice
Ecrire un script PHP qui permet d’afficher les tables d’addition,soustraction, multiplication et division de $nombre.
H & H: Research and Training 100 / 218
c© Achref EL MOUELHI c©
Conditions et boucles for
PHP
Correction
<body><div class=container>
<?phpfor ($j = 0; $j < strlen($op); $j++) {
echo "<div>";for ($i = 1; $i <= 10; $i++) {
$operation = $nombre . " " . $op[$j] . " " . $i;
echo "$operation = ";eval("echo $operation .’<br>’;");
}echo "</div>";
}?>
</div></body>
H & H: Research and Training 101 / 218
c© Achref EL MOUELHI c©
Tableaux
PHP
Trois types de tableaux
tableaux indexes : tableaux avec indices numeriques
tableaux associatifs : tableaux avec indices personnalises
tableaux multidimensionnels : tableaux contenant d’autrestableaux
H & H: Research and Training 102 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux indexes
PHP
Pour creer un tableau indexees d’entiers
$nombres = array(2,5,8
);
Ou aussi
$nombres = [2,5,8
];
H & H: Research and Training 103 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux indexes
PHP
Pour creer un tableau indexees d’entiers
$nombres = array(2,5,8
);
Ou aussi
$nombres = [2,5,8
];
H & H: Research and Training 103 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux indexes
PHP
Pour connaıtre le nombre d’elements d’un tableau
echo count($nombres);/* affiche 3 */
Pour acceder a un element du tableau, on utilise son indice
$nombres[1] = 6;echo $nombres[1];/* affiche 6 */
H & H: Research and Training 104 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux indexes
PHP
Pour connaıtre le nombre d’elements d’un tableau
echo count($nombres);/* affiche 3 */
Pour acceder a un element du tableau, on utilise son indice
$nombres[1] = 6;echo $nombres[1];/* affiche 6 */
H & H: Research and Training 104 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux indexes
PHP
Les elements d’un tableau ne doivent pas forcement avoir desindices consecutifs
$nombres[5] = 6;var_dump($nombres);/* afficheC:\wamp64\www\premier-cours-php\index.php:11:array (size=4)0 => int 21 => int 52 => int 85 => int 6
*/
H & H: Research and Training 105 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux indexes
PHP
Pour ajouter un nouvel element au tableau tout en gardant lasuccession des indices
$nombres[] = 6;var_dump($nombres);/* afficheC:\wamp64\www\premier-cours-php\index.php:11:array (size=4)0 => int 21 => int 52 => int 83 => int 6
*/
H & H: Research and Training 106 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux indexes
PHP
Pour mieux afficher un tableau, on peut utiliser la fonctionprint r()
$nombres[5] = 6;print_r($nombres);/* afficheArray ([0] => 2[1] => 5[2] => 8[5] => 6 )
*/
H & H: Research and Training 107 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux indexes
PHP
Pour parcourir un tableau, avec une boucle, element par element
for($i = 0; $i < count($nombres); $i++) {echo $nombres[$i], "<br>";
}
On peut aussi utiliser foreach
foreach ($nombres as $value) {echo $value, "<br>";
}
H & H: Research and Training 108 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux indexes
PHP
Pour parcourir un tableau, avec une boucle, element par element
for($i = 0; $i < count($nombres); $i++) {echo $nombres[$i], "<br>";
}
On peut aussi utiliser foreach
foreach ($nombres as $value) {echo $value, "<br>";
}
H & H: Research and Training 108 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux indexes
PHP
Etant donne le tableau suivant
$voitures = [’peugeot’, ’ford’, ’fiat’, ’mercedes’,’seat’];
Exercice
Ecrire un script PHP qui permet de calculer la somme des longueursdes chaınes de caracteres definies dans $voitures.
H & H: Research and Training 109 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux indexes
PHP
Etant donne le tableau suivant
$voitures = [’peugeot’, ’ford’, ’fiat’, ’mercedes’,’seat’];
Exercice
Ecrire un script PHP qui permet de calculer la somme des longueursdes chaınes de caracteres definies dans $voitures.
H & H: Research and Training 109 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux indexes
PHP
Correction
$voitures = [’peugeot’, ’ford’, ’fiat’, ’mercedes’, ’seat’];$total_caracteres = 0;foreach ($voitures as $value) {
$total_caracteres += strlen($value);}echo $total_caracteres;
H & H: Research and Training 110 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux indexes
PHP
Etant donnees les deux variables suivantes
$voiture = ’ford’;$voitures = [’peugeot’, ’ford’, ’fiat’, ’mercedes’,
’seat’, ’ford’, ’fiat’, ’ford’];
Exercice
Ecrire un script PHP qui permet de calculer nombre d’occurrence de$voiture dans $voitures.
H & H: Research and Training 111 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux indexes
PHP
Etant donnees les deux variables suivantes
$voiture = ’ford’;$voitures = [’peugeot’, ’ford’, ’fiat’, ’mercedes’,
’seat’, ’ford’, ’fiat’, ’ford’];
Exercice
Ecrire un script PHP qui permet de calculer nombre d’occurrence de$voiture dans $voitures.
H & H: Research and Training 111 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux indexes
PHPPremiere solution
$occurrence = 0;foreach ($voitures as $value) {
if ($value == $voiture) {$occurrence++;
}}echo $occurrence;
Deuxieme solution
$occurrence = 0;foreach ($voitures as $value) {
$occurrence += ($value == $voiture);}echo $occurrence;
H & H: Research and Training 112 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux indexes
PHPPremiere solution
$occurrence = 0;foreach ($voitures as $value) {
if ($value == $voiture) {$occurrence++;
}}echo $occurrence;
Deuxieme solution
$occurrence = 0;foreach ($voitures as $value) {
$occurrence += ($value == $voiture);}echo $occurrence;
H & H: Research and Training 112 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux indexes
PHP
Pour chercher un element dans un tableau indexe
echo(array_search(8, $nombres));/* affiche 2 */
On peut aussi comparer des types differents
echo(array_search("8", $nombres));/* affiche 2 */
Pour comparer les valeurs et les types, on ajoute un troisiemeparametre optionnel
echo(array_search("5", $nombres, true));/* n’affiche rien */
H & H: Research and Training 113 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux indexes
PHP
Pour chercher un element dans un tableau indexe
echo(array_search(8, $nombres));/* affiche 2 */
On peut aussi comparer des types differents
echo(array_search("8", $nombres));/* affiche 2 */
Pour comparer les valeurs et les types, on ajoute un troisiemeparametre optionnel
echo(array_search("5", $nombres, true));/* n’affiche rien */
H & H: Research and Training 113 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux indexes
PHP
Pour chercher un element dans un tableau indexe
echo(array_search(8, $nombres));/* affiche 2 */
On peut aussi comparer des types differents
echo(array_search("8", $nombres));/* affiche 2 */
Pour comparer les valeurs et les types, on ajoute un troisiemeparametre optionnel
echo(array_search("5", $nombres, true));/* n’affiche rien */
H & H: Research and Training 113 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux indexes
PHP
La fonction in array() retourne un booleen
echo(in_array("8", $nombres));/* affiche 1 */
echo(in_array(145, $nombres));/* n’affiche rien */
Pour comparer les valeurs et les types, on ajoute un troisiemeparametre optionnel
echo(in_array("8", $nombres, true));/* n’affiche rien */
H & H: Research and Training 114 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux indexes
PHP
La fonction in array() retourne un booleen
echo(in_array("8", $nombres));/* affiche 1 */
echo(in_array(145, $nombres));/* n’affiche rien */
Pour comparer les valeurs et les types, on ajoute un troisiemeparametre optionnel
echo(in_array("8", $nombres, true));/* n’affiche rien */
H & H: Research and Training 114 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux indexes
Quelques fonctions sur les tableaux indexes
range($min, $max : retourne un tableau de valeurs sequentielles comprises entre $minet $max
array pop(tableau) : supprime le dernier element d’un tableau
array push(tableau, $valeur1, $valeur2...) : ajoute $valeur1,$valeur2... comme derniers elements d’un tableau
array sum(tableau) (respectivement array product(tableau)) : retourne lasomme (resp. le produit) des elements d’un tableau
array reverse(tableau) : retourne les elements d’un tableau dans le sens inverse
array shuffle(tableau) : desordonne les elements d’un tableau
array unique(tableau) : supprime les doublons d’un tableau
sort(tableau) : trie les elements d’un tableau dans le sens ascendant
rsort(tableau) : trie les elements d’un tableau dans le sens descendant
...
H & H: Research and Training 115 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux indexes
PHP
Exemple avec splice
$sports = ["foot", "tennis", "basket", "volley"];$new = ["rugby", "natation"];
$tab = array_splice($sports, 2, 0, $new);
print_r($sports);/* affiche Array ([0] => foot[1] => tennis[2] =>
rugby[3] => natation[4] => basket[5] => volley )
*/
print_r($tab)/* affiche Array ( ) */
Aucun element supprime car le troisieme parametre = 0
H & H: Research and Training 116 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux indexes
PHP
Exemple avec splice
$sports = ["foot", "tennis", "basket", "volley"];$new = ["rugby", "natation"];
$tab = array_splice($sports, 2, 0, $new);
print_r($sports);/* affiche Array ([0] => foot[1] => tennis[2] =>
rugby[3] => natation[4] => basket[5] => volley )
*/
print_r($tab)/* affiche Array ( ) */
Aucun element supprime car le troisieme parametre = 0H & H: Research and Training 116 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux indexes
PHP
Exemple avec splice
$sports = ["foot", "tennis", "basket", "volley"];$new = ["rugby", "natation"];
$tab = array_splice($sports, 2, 1, $new);
print_r($sports);/* affiche Array ([0] => foot[1] => tennis[2] =>
rugby[3] => natation[4] => volley ) */
print_r($tab);/* affiche Array ([0] => basket ) */
Un seul element supprime car le deuxieme parametre = 1
H & H: Research and Training 117 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux indexes
PHP
Exemple avec splice
$sports = ["foot", "tennis", "basket", "volley"];$new = ["rugby", "natation"];
$tab = array_splice($sports, 2, 1, $new);
print_r($sports);/* affiche Array ([0] => foot[1] => tennis[2] =>
rugby[3] => natation[4] => volley ) */
print_r($tab);/* affiche Array ([0] => basket ) */
Un seul element supprime car le deuxieme parametre = 1
H & H: Research and Training 117 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux indexes
PHP
A ne pas confondre avec slice qui permet d’extraire unsous-tableau sans modifier le tableau d’origine
$sports = ["foot", "tennis", "basket", "volley"];
$tab = array_slice($sports, 0, 2);
print_r($sports);/* affiche Array ([0] => foot[1] => tennis[2] =>
basket[3] => volley ) */
print_r($tab);/* affiche Array ([0] => foot[1] => tennis ) */
H & H: Research and Training 118 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux indexes
PHP
La fonction implode permet de transformer un tableau en chaıne de caracteres
$sports = ["foot", "tennis", "basket", "volley"];$string = implode("-", $sports);
echo $string;/* affiche foot-tennis-basket-volley */
echo gettype($string);/* affiche string */
La fonction explode permet de transformer une chaıne de caracteres 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
c© Achref EL MOUELHI c©
Tableaux Tableaux indexes
PHP
La fonction implode permet de transformer un tableau en chaıne de caracteres
$sports = ["foot", "tennis", "basket", "volley"];$string = implode("-", $sports);
echo $string;/* affiche foot-tennis-basket-volley */
echo gettype($string);/* affiche string */
La fonction explode permet de transformer une chaıne de caracteres 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
c© Achref EL MOUELHI c©
Tableaux Tableaux indexes
PHP
Pour transformer une chaıne de caracteres en tableau decaracteres, on utilise la fonction str split
$string = "bonjour john wick";print_r(str_split($string));/* affiche Array ([0] => b[1] => o[2] => n[3] => j
[4] => o[5] => u[6] => r[7] =>[8] => j[9] => o[10] => h[11] => n[12] =>[13] => w[14] => i[15]=> c[16] => k ) */
H & H: Research and Training 120 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux associatifs
PHPPour creer un tableau associatif (ensemble cle ⇒ valeur)
$fcb = array("messi" => 10,"umtiti" => 23,"suarez" => 9
);
Pour ajouter un nouvel element
$fcb["rakitic"] = 4;
Pour afficher les elements d’un tableau associatif
var_dump($fcb);/* 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
c© Achref EL MOUELHI c©
Tableaux Tableaux associatifs
PHPPour creer un tableau associatif (ensemble cle ⇒ valeur)
$fcb = array("messi" => 10,"umtiti" => 23,"suarez" => 9
);
Pour ajouter un nouvel element
$fcb["rakitic"] = 4;
Pour afficher les elements d’un tableau associatif
var_dump($fcb);/* 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
c© Achref EL MOUELHI c©
Tableaux Tableaux associatifs
PHPPour creer un tableau associatif (ensemble cle ⇒ valeur)
$fcb = array("messi" => 10,"umtiti" => 23,"suarez" => 9
);
Pour ajouter un nouvel element
$fcb["rakitic"] = 4;
Pour afficher les elements d’un tableau associatif
var_dump($fcb);/* 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
c© Achref EL MOUELHI c©
Tableaux Tableaux associatifs
PHP
Pour parcourir un tableau associatif element par element
foreach ($fcb as $key => $value) {echo $key, " => ", $value, "<br>";
}
Le resultat est
messi => 10umtiti => 23suarez => 9
H & H: Research and Training 122 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux associatifs
PHP
Pour parcourir un tableau associatif element par element
foreach ($fcb as $key => $value) {echo $key, " => ", $value, "<br>";
}
Le resultat est
messi => 10umtiti => 23suarez => 9
H & H: Research and Training 122 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux associatifs
PHP
On peut aussi faire
foreach (array_keys($fcb) as $key) {echo $key, " => ", $fcb[$key], "<br>";
}
Le resultat est le meme
messi => 10umtiti => 23suarez => 9
H & H: Research and Training 123 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux associatifs
PHP
On peut aussi faire
foreach (array_keys($fcb) as $key) {echo $key, " => ", $fcb[$key], "<br>";
}
Le resultat est le meme
messi => 10umtiti => 23suarez => 9
H & H: Research and Training 123 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux associatifs
PHPLes cles (respectivement les valeurs) peuvent ne pas avoir les memetypes
$mixte = array(17 => 10,"umtiti" => 23,"suarez" => 9
);$mixte[2] = true;
var_dump($mixte);/* affiche C:\wamp64\www\premier-cours-php\index.php:11:array (size=4)17 => int 10’umtiti’ => int 23’suarez’ => int 92 => boolean true
*/
H & H: Research and Training 124 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux associatifs
PHP
Quelques fonctions sur les tableaux associatifs
array key exists() : verifie si une cle existe
array values() : retourne la liste des valeurs
array flip : transforme les cles en valeurs et les valeurs en clesksort() : trie un tableau associatif selon les cles dans un ordrecroissant
krsort() : trie un tableau associatif selon les cles dans un ordredecroissant
...
H & H: Research and Training 125 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux associatifs
PHP
Etant donnees les variables suivantes
$cle = "messi";$valeur = 10;$fcb = array(
"messi" => 10,"umtiti" => 23,"suarez" => 9
);
Exercice
Ecrire un script PHP qui permet de verifier si $valeur est associee a$cle.
H & H: Research and Training 126 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux associatifs
PHP
Etant donnees les variables suivantes
$cle = "messi";$valeur = 10;$fcb = array(
"messi" => 10,"umtiti" => 23,"suarez" => 9
);
Exercice
Ecrire un script PHP qui permet de verifier si $valeur est associee a$cle.
H & H: Research and Training 126 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux associatifs
PHP
Correction
echo ($fcb[$cle] == $valeur) ? "$cle est le numero $valeur" : "$cle n’a pas le numero $valeur";
H & H: Research and Training 127 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux associatifs
PHP
Etant donnees les variables suivantes
$valeur = 10;$fcb = array(
"messi" => 10,"umtiti" => 23,"suarez" => 9,"rivaldo" => 9,"maradona" => 10,"figo" => 9
);
Exercice
Ecrire un script PHP qui permet de determiner l’ensemble de cles associees a$valeur.
H & H: Research and Training 128 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux associatifs
PHP
Etant donnees les variables suivantes
$valeur = 10;$fcb = array(
"messi" => 10,"umtiti" => 23,"suarez" => 9,"rivaldo" => 9,"maradona" => 10,"figo" => 9
);
Exercice
Ecrire un script PHP qui permet de determiner l’ensemble de cles associees a$valeur.
H & H: Research and Training 128 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux associatifs
PHP
Correction
$cles = [];foreach ($fcb as $key => $value) {
if ($valeur == $value) {$cles[] = $key;
}}print_r($cles);
H & H: Research and Training 129 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux multidimensionnels
PHPPour creer un tableau multidimensionnel
$langages = array(
array("html", "css"),array("js", "ts"),array("php", "java", "csharp")
);
Pour acceder a un element
echo($langages[2][0]);/* affiche php */
Pour ajouter un element
$langages[3] = array("c", "c++");
H & H: Research and Training 130 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux multidimensionnels
PHPPour creer un tableau multidimensionnel
$langages = array(
array("html", "css"),array("js", "ts"),array("php", "java", "csharp")
);
Pour acceder a un element
echo($langages[2][0]);/* affiche php */
Pour ajouter un element
$langages[3] = array("c", "c++");
H & H: Research and Training 130 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux multidimensionnels
PHPPour creer un tableau multidimensionnel
$langages = array(
array("html", "css"),array("js", "ts"),array("php", "java", "csharp")
);
Pour acceder a un element
echo($langages[2][0]);/* affiche php */
Pour ajouter un element
$langages[3] = array("c", "c++");
H & H: Research and Training 130 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux multidimensionnels
PHP
Etant donnees les variables suivantes
$valeur = 5;$matrice = array(
array(2, 3, 5, 7),array(1, 2, 5, 9, 5),array(4, 2, 9, 3, 1, 5)
);
Exercice
Ecrire un script PHP qui permet de calculer le nombre d’occurrence de $valeurdans $matrice par ligne.
H & H: Research and Training 131 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux multidimensionnels
PHP
Etant donnees les variables suivantes
$valeur = 5;$matrice = array(
array(2, 3, 5, 7),array(1, 2, 5, 9, 5),array(4, 2, 9, 3, 1, 5)
);
Exercice
Ecrire un script PHP qui permet de calculer le nombre d’occurrence de $valeurdans $matrice par ligne.
H & H: Research and Training 131 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux multidimensionnels
PHP
Correction
$compteurs = [0, 0, 0];for ($i = 0; $i < count($matrice); $i++) {
foreach ($matrice[$i] as $value) {if ($value == $valeur) {
$compteurs[$i]++;}
}}print_r($compteurs);
H & H: Research and Training 132 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux multidimensionnels
PHP
Etant donnees les variables suivantes
$valeur = 5;$matrice = array(
array(2, 3, 5, 7),array(1, 2, 5, 9, 5),array(4, 2, 9, 3, 1, 5)
);
Exercice
Ecrire un script PHP qui permet de determiner si $valeur est presente dans chaqueligne de $matrice.
H & H: Research and Training 133 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux multidimensionnels
PHP
Etant donnees les variables suivantes
$valeur = 5;$matrice = array(
array(2, 3, 5, 7),array(1, 2, 5, 9, 5),array(4, 2, 9, 3, 1, 5)
);
Exercice
Ecrire un script PHP qui permet de determiner si $valeur est presente dans chaqueligne de $matrice.
H & H: Research and Training 133 / 218
c© Achref EL MOUELHI c©
Tableaux Tableaux multidimensionnels
PHP
Correction
$trouver = true;for ($i = 0; $i < count($matrice) && $trouver; $i++) {
if (!in_array($valeur, $matrice[$i])) {$trouver = false;
}}print($trouver ? "oui" : "non");
H & H: Research and Training 134 / 218
c© Achref EL MOUELHI c©
Constantes
PHP
Une constante
un element qui ne peut changer de valeur
Pour declarer une constante,
Utilise la fonction define(nom constante, valeur, insensibilite a lacasse) : le dernier parametre est facultatif et sa valeur par defaut est false
Exemple (Par convention , les constantes sont toujours ecrites en majuscules)
define(PI, 3.1415);
L’instruction suivante ne peut etre acceptee
PI = 5;
H & H: Research and Training 135 / 218
c© Achref EL MOUELHI c©
Constantes
PHP
Une constante
un element qui ne peut changer de valeur
Pour declarer une constante,
Utilise la fonction define(nom constante, valeur, insensibilite a lacasse) : le dernier parametre est facultatif et sa valeur par defaut est false
Exemple (Par convention , les constantes sont toujours ecrites en majuscules)
define(PI, 3.1415);
L’instruction suivante ne peut etre acceptee
PI = 5;
H & H: Research and Training 135 / 218
c© Achref EL MOUELHI c©
Constantes
PHP
Une constante
un element qui ne peut changer de valeur
Pour declarer une constante,
Utilise la fonction define(nom constante, valeur, insensibilite a lacasse) : le dernier parametre est facultatif et sa valeur par defaut est false
Exemple (Par convention , les constantes sont toujours ecrites en majuscules)
define(PI, 3.1415);
L’instruction suivante ne peut etre acceptee
PI = 5;
H & H: Research and Training 135 / 218
c© Achref EL MOUELHI c©
Constantes
PHP
Une constante
un element qui ne peut changer de valeur
Pour declarer une constante,
Utilise la fonction define(nom constante, valeur, insensibilite a lacasse) : le dernier parametre est facultatif et sa valeur par defaut est false
Exemple (Par convention , les constantes sont toujours ecrites en majuscules)
define(PI, 3.1415);
L’instruction suivante ne peut etre acceptee
PI = 5;
H & H: Research and Training 135 / 218
c© Achref EL MOUELHI c©
Constantes
PHP
Remarques
Le nom d’une constante ne doit pas contenir les caracteres $ ni
Depuis PHP 7, on peut declarer un tableau de constantes.
H & H: Research and Training 136 / 218
c© Achref EL MOUELHI c©
Fonctions
PHP
Une fonction ?
Un bloc d’instructions pouvant etre appele plusieurs fois
Declaration d’une fonction ; son execution
Appel d’une fonction⇒ son execution
Particularite du langage PHP
Le nom d’une fonction n’est pas sensible a la casse
Depuis PHP 7, on peut typer les parametres et la valeur de retour
H & H: Research and Training 137 / 218
c© Achref EL MOUELHI c©
Fonctions
PHP
Une fonction ?
Un bloc d’instructions pouvant etre appele plusieurs fois
Declaration d’une fonction ; son execution
Appel d’une fonction⇒ son execution
Particularite du langage PHP
Le nom d’une fonction n’est pas sensible a la casse
Depuis PHP 7, on peut typer les parametres et la valeur de retour
H & H: Research and Training 137 / 218
c© Achref EL MOUELHI c©
Fonctions Fonctions nommees
PHPDeclarer une fonction
function nom_fonction([les arguments]){les instructions de la fonction
}
Exemple
function somme($a, $b){
return $a + $b;}
Appeler une fonction
$resultat = somme (1, 3);echo $resultat;/* affiche 4 */
H & H: Research and Training 138 / 218
c© Achref EL MOUELHI c©
Fonctions Fonctions nommees
PHPDeclarer une fonction
function nom_fonction([les arguments]){les instructions de la fonction
}
Exemple
function somme($a, $b){
return $a + $b;}
Appeler une fonction
$resultat = somme (1, 3);echo $resultat;/* affiche 4 */
H & H: Research and Training 138 / 218
c© Achref EL MOUELHI c©
Fonctions Fonctions nommees
PHPDeclarer une fonction
function nom_fonction([les arguments]){les instructions de la fonction
}
Exemple
function somme($a, $b){
return $a + $b;}
Appeler une fonction
$resultat = somme (1, 3);echo $resultat;/* affiche 4 */
H & H: Research and Training 138 / 218
c© Achref EL MOUELHI c©
Fonctions Fonctions nommees
PHP
Exercice
Ecrire une fonction PHP qui permet de determiner si un nombre passeen parametre est premier. La fonction retourne un booleen.
H & H: Research and Training 139 / 218
c© Achref EL MOUELHI c©
Fonctions Fonctions anonymes
PHPDeclarer une fonction anonyme (appelee aussi closure ou fermeture)
$nom_variable = function ([les arguments]){les instructions de la fonction
}
Exemple
$somme2 = function ($a, $b){
return $a + $b;};
Appeler une fonction anonyme
$resultat = $somme2 (1, 3);echo $resultat;/* affiche 4 */
H & H: Research and Training 140 / 218
c© Achref EL MOUELHI c©
Fonctions Fonctions anonymes
PHPDeclarer une fonction anonyme (appelee aussi closure ou fermeture)
$nom_variable = function ([les arguments]){les instructions de la fonction
}
Exemple
$somme2 = function ($a, $b){
return $a + $b;};
Appeler une fonction anonyme
$resultat = $somme2 (1, 3);echo $resultat;/* affiche 4 */
H & H: Research and Training 140 / 218
c© Achref EL MOUELHI c©
Fonctions Fonctions anonymes
PHPDeclarer une fonction anonyme (appelee aussi closure ou fermeture)
$nom_variable = function ([les arguments]){les instructions de la fonction
}
Exemple
$somme2 = function ($a, $b){
return $a + $b;};
Appeler une fonction anonyme
$resultat = $somme2 (1, 3);echo $resultat;/* affiche 4 */
H & H: Research and Training 140 / 218
c© Achref EL MOUELHI c©
Fonctions Valeurs par defaut pour les parametres
Appeler la fonction somme sans passer de parametres ⇒ erreur fatale
echo(somme());
Solution : affecter des valeurs par defaut aux parametres
function somme($a = 0, $b = 0){
return $a + $b;}
Ainsi, on peut appeler la fonction avec 0, 1 ou deux parametres
echo somme ();/* affiche 0 */
echo somme (5);/* affiche 5 */
echo somme (5, 3);/* affiche 8 */
H & H: Research and Training 141 / 218
c© Achref EL MOUELHI c©
Fonctions Valeurs par defaut pour les parametres
Appeler la fonction somme sans passer de parametres ⇒ erreur fatale
echo(somme());
Solution : affecter des valeurs par defaut aux parametres
function somme($a = 0, $b = 0){
return $a + $b;}
Ainsi, on peut appeler la fonction avec 0, 1 ou deux parametres
echo somme ();/* affiche 0 */
echo somme (5);/* affiche 5 */
echo somme (5, 3);/* affiche 8 */
H & H: Research and Training 141 / 218
c© Achref EL MOUELHI c©
Fonctions Valeurs par defaut pour les parametres
Appeler la fonction somme sans passer de parametres ⇒ erreur fatale
echo(somme());
Solution : affecter des valeurs par defaut aux parametres
function somme($a = 0, $b = 0){
return $a + $b;}
Ainsi, on peut appeler la fonction avec 0, 1 ou deux parametres
echo somme ();/* affiche 0 */
echo somme (5);/* affiche 5 */
echo somme (5, 3);/* affiche 8 */
H & H: Research and Training 141 / 218
c© Achref EL MOUELHI c©
Fonctions Fonctions a nombre indetermine de parametres
Pour ecrire une fonction qui accepte un nombre indetermine de parametres, on peututiliser 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];}return $result;
}
Tous ces appels sont corrects
echo(somme(2, 3, 5));/* affiche 10 */
echo(somme(2, 3));/* affiche 5 */
echo(somme(2, 3, 5, 7));/* affiche 17 */
echo(somme(2));/* affiche 2 */
H & H: Research and Training 142 / 218
c© Achref EL MOUELHI c©
Fonctions Fonctions a nombre indetermine de parametres
Pour ecrire une fonction qui accepte un nombre indetermine de parametres, on peututiliser 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];}return $result;
}
Tous ces appels sont corrects
echo(somme(2, 3, 5));/* affiche 10 */
echo(somme(2, 3));/* affiche 5 */
echo(somme(2, 3, 5, 7));/* affiche 17 */
echo(somme(2));/* affiche 2 */
H & H: Research and Training 142 / 218
c© Achref EL MOUELHI c©
Fonctions Fonctions a nombre indetermine de parametres
Depuis PHP 5.6, on peut aussi utiliser le concept de decomposition avec l’operateur ...
function somme (...$arguments){
$result = 0;for($i = 0; $i < count($arguments) ; $i++) {
$result += $arguments[$i];}return $result;
}
Tous ces appels restent corrects
echo(somme(2, 3, 5));/* affiche 10 */
echo(somme(2, 3));/* affiche 5 */
echo(somme(2, 3, 5, 7));/* affiche 17 */
echo(somme(2));/* affiche 2 */
H & H: Research and Training 143 / 218
c© Achref EL MOUELHI c©
Fonctions Fonctions a nombre indetermine de parametres
Depuis PHP 5.6, on peut aussi utiliser le concept de decomposition avec l’operateur ...
function somme (...$arguments){
$result = 0;for($i = 0; $i < count($arguments) ; $i++) {
$result += $arguments[$i];}return $result;
}
Tous ces appels restent corrects
echo(somme(2, 3, 5));/* affiche 10 */
echo(somme(2, 3));/* affiche 5 */
echo(somme(2, 3, 5, 7));/* affiche 17 */
echo(somme(2));/* affiche 2 */
H & H: Research and Training 143 / 218
c© Achref EL MOUELHI c©
Fonctions Fonctions a nombre indetermine de parametres
PHP
Exercice
Ecrire une fonction PHP qui permet de determiner si le premierparametre est divisible par tous les autres parametres. Le nombre deparametres est variable et la fonction retourne un booleen.
Exemple
var_dump(est_divisible_par(10, 2, 3, 5));var_dump(est_divisible_par(10, 2, 5));
H & H: Research and Training 144 / 218
c© Achref EL MOUELHI c©
Fonctions Fonctions a nombre indetermine de parametres
PHP
Correction
function est_divisible_par($nombre, ...$diviseurs){
foreach ($diviseurs as $diviseur) {if ($nombre % $diviseur != 0)
return false;}return true;
}
H & H: Research and Training 145 / 218
c© Achref EL MOUELHI c©
Fonctions Decomposition
PHP
Depuis PHP 7.4, il est possible de decomposer un tableau avecl’operateur ...
$nombres = array(2,5,8
);
$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
c© Achref EL MOUELHI c©
Fonctions Passage par reference
PHP
Exercice
Ecrire une fonction qui permet de permuter le contenu de deuxvariables (de type entier par exemple) passees en parametre
Voici a quoi en pense la premiere fois
function permuter($a, $b){
$aux = $a;$a = $b;$b = $aux;
}
H & H: Research and Training 147 / 218
c© Achref EL MOUELHI c©
Fonctions Passage par reference
PHP
Exercice
Ecrire une fonction qui permet de permuter le contenu de deuxvariables (de type entier par exemple) passees en parametre
Voici a quoi en pense la premiere fois
function permuter($a, $b){
$aux = $a;$a = $b;$b = $aux;
}
H & H: Research and Training 147 / 218
c© Achref EL MOUELHI c©
Fonctions Passage par reference
PHPEn testant ce code, c’est la surprise
$x = 2;$y = 3;permuter($x, $y);echo $x, " ", $y;/* affiche 2 3 */
Et pourtant, si on verifie dans la fonction, les valeurs ont bien ete permutees
function permuter($a, $b){
$aux = $a;$a = $b;$b = $aux;echo $a, " ", $b;/* affiche 3 2 */
}
H & H: Research and Training 148 / 218
c© Achref EL MOUELHI c©
Fonctions Passage par reference
PHPEn testant ce code, c’est la surprise
$x = 2;$y = 3;permuter($x, $y);echo $x, " ", $y;/* affiche 2 3 */
Et pourtant, si on verifie dans la fonction, les valeurs ont bien ete permutees
function permuter($a, $b){
$aux = $a;$a = $b;$b = $aux;echo $a, " ", $b;/* affiche 3 2 */
}
H & H: Research and Training 148 / 218
c© Achref EL MOUELHI c©
Fonctions Passage par reference
PHP
Passage par valeur
Les fonctions, par definition, recoivent une copie du contenu de lavariable
Elles ne manipulent pas la case de memoire de la variableenvoyee
On appelle ce concept passage par valeur
Quelle solution?
Passage par reference
H & H: Research and Training 149 / 218
c© Achref EL MOUELHI c©
Fonctions Passage par reference
PHP
Passage par valeur
Les fonctions, par definition, recoivent une copie du contenu de lavariable
Elles ne manipulent pas la case de memoire de la variableenvoyee
On appelle ce concept passage par valeur
Quelle solution?
Passage par reference
H & H: Research and Training 149 / 218
c© Achref EL MOUELHI c©
Fonctions Passage par reference
PHPPour passer les parametres par reference, on utilise &
function permuter(&$a, &$b){
$aux = $a;$a = $b;$b = $aux;
}
Pour tester
$x = 2;$y = 3;permuter($x, $y);echo $x, " ", $y;/* affiche 3 2 */
H & H: Research and Training 150 / 218
c© Achref EL MOUELHI c©
Fonctions Passage par reference
PHPPour passer les parametres par reference, on utilise &
function permuter(&$a, &$b){
$aux = $a;$a = $b;$b = $aux;
}
Pour tester
$x = 2;$y = 3;permuter($x, $y);echo $x, " ", $y;/* affiche 3 2 */
H & H: Research and Training 150 / 218
c© Achref EL MOUELHI c©
Fonctions Fonction de retour (callback)
PHP
Fonction de retour (ou de rappel, en anglais callback)
fonction appelee comme un parametre d’une deuxieme fonction
tres utilisee avec les fonctions asynchrones
Considerons les deux fonctions suivantes
function somme($a, $b){
return $a + $b;}
function produit($a, $b){
return $a * $b;}
H & H: Research and Training 151 / 218
c© Achref EL MOUELHI c©
Fonctions Fonction de retour (callback)
PHP
Fonction de retour (ou de rappel, en anglais callback)
fonction appelee comme un parametre d’une deuxieme fonction
tres utilisee avec les fonctions asynchrones
Considerons les deux fonctions suivantes
function somme($a, $b){
return $a + $b;}
function produit($a, $b){
return $a * $b;}
H & H: Research and Training 151 / 218
c© Achref EL MOUELHI c©
Fonctions Fonction de retour (callback)
PHP
Utilisons les fonctions precedentes comme callback d’unefonction operation()
function operation($a, $b, $fonction){
echo ($fonction($a, $b));}operation (3, 5, ’somme’);/* affiche 8 */
H & H: Research and Training 152 / 218
c© Achref EL MOUELHI c©
Fonctions Fonction de retour (callback)
PHP
On peut aussi utiliser la fonction is callable si un parametrecorrespond a une fonction de rappel
function operation($a, $b, $fonction){
if (is_callable($fonction))echo ($fonction($a, $b));
elseecho "erreur";
}
operation (3, 5, ’somme’);/* affiche 8 */
operation (3, 5, ’division’);/* affiche erreur */
H & H: Research and Training 153 / 218
c© Achref EL MOUELHI c©
Fonctions Fonction de retour (callback)
PHP
On peut aussi executer la fonction callback en appelant lafonction PHP call user func
function operation($a, $b, $fonction){
if (is_callable($fonction))echo call_user_func($fonction, $a, $b);
elseecho "erreur";
}
operation (3, 5, ’somme’);/* affiche 8 */
operation (3, 5, ’division’);/* affiche erreur */
H & H: Research and Training 154 / 218
c© Achref EL MOUELHI c©
Fonctions Fonction de retour (callback)
PHP
Exercice
Modifier la fonction operation pour qu’elle puisse accepter deuxfonctions callback ensuite retourner le resultat de la compositiondes deux.
Par exemple :operation (2, 3 , 6, ’somme’, ’produit’) retourne30 = (2 + 3) * 6
H & H: Research and Training 155 / 218
c© Achref EL MOUELHI c©
Fonctions Fonction de retour (callback)
PHP
Quelques fonctions predefinies sur les tableaux utilisant les callback
array map(callback, tableau)
array filter(tableau, callback)
array reduce(tableau, callback, initial)
H & H: Research and Training 156 / 218
c© Achref EL MOUELHI c©
Fonctions Fonction de retour (callback)
PHP
Exemple avec array map
$nombres = array(2,5,8
);
function carre($x){
return $x * $x;}
print_r(array_map("carre", $nombres));/* affiche Array ([0] => 4[1] => 25[2] => 64 ) */
H & H: Research and Training 157 / 218
c© Achref EL MOUELHI c©
Fonctions Fonction de retour (callback)
PHP
Exemple avec array filter
$nombres = array(2,5,8
);
function estPair($x){
return $x % 2 == 0;}
print_r(array_filter($nombres, "estPair"));/* affiche Array ([0] => 2[2] => 8 ) */
H & H: Research and Training 158 / 218
c© Achref EL MOUELHI c©
Fonctions Fonction de retour (callback)
PHP
Exemple avec array reduce
$nombres = array(2,5,8
);
function somme($x, $y){
return $x + $y;}
print_r(array_reduce($nombres, "somme", 0));/* affiche 15 */
H & H: Research and Training 159 / 218
c© Achref EL MOUELHI c©
Fonctions Fonctions flechees (Arrow functions)
PHP
Fonctions flechees (Arrow functions)
Disponible depuis PHP 7.4
Utilisant le mot-cle fn et l’operateur =>
H & H: Research and Training 160 / 218
c© Achref EL MOUELHI c©
Fonctions Fonctions flechees (Arrow functions)
PHP
Exemple avec array map
$nombres = array(2,5,8
);
$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
c© Achref EL MOUELHI c©
Fonctions Fonctions flechees (Arrow functions)
PHP
Exemple avec array filter
$nombres = array(2,5,8
);
$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
c© Achref EL MOUELHI c©
Fonctions Fonctions flechees (Arrow functions)
PHP
Exemple avec array reduce
$nombres = array(2,5,8
);
$tab = array_reduce($nombres, fn ($elt, $res) =>$elt + $res, 0);
print_r($tab);/* affiche 15 */
H & H: Research and Training 163 / 218
c© Achref EL MOUELHI c©
Fonctions Typage de parametres
PHP
Typage de parametres
Disponible depuis PHP 7
Permettant de filtrer les valeurs pour eviter a nos fonctions uncomportement indesirable
Syntaxe
function nom_fonction([{type_variable $nom_variable}])
{// les instructions
}
H & H: Research and Training 164 / 218
c© Achref EL MOUELHI c©
Fonctions Typage de parametres
PHP
Typage de parametres
Disponible depuis PHP 7
Permettant de filtrer les valeurs pour eviter a nos fonctions uncomportement indesirable
Syntaxe
function nom_fonction([{type_variable $nom_variable}])
{// les instructions
}
H & H: Research and Training 164 / 218
c© Achref EL MOUELHI c©
Fonctions Typage de parametres
PHP
Exemple
function somme(int $a, int $b){
return $a + $b;}
Appeler une fonction
$resultat = somme (1, 3);console.log($resultat);/* affiche 4 */
H & H: Research and Training 165 / 218
c© Achref EL MOUELHI c©
Fonctions Typage de parametres
PHP
Exemple
function somme(int $a, int $b){
return $a + $b;}
Appeler une fonction
$resultat = somme (1, 3);console.log($resultat);/* affiche 4 */
H & H: Research and Training 165 / 218
c© Achref EL MOUELHI c©
Fonctions Typage de valeurs de retour
PHP
Typage de valeurs de retour
Disponible depuis PHP 7
Permettant de determiner le type de la variable recevant la valeurde retour d’une fonction
Syntaxe
function nom_fonction([les parametres]): type{
// les instructions}
H & H: Research and Training 166 / 218
c© Achref EL MOUELHI c©
Fonctions Typage de valeurs de retour
PHP
Typage de valeurs de retour
Disponible depuis PHP 7
Permettant de determiner le type de la variable recevant la valeurde retour d’une fonction
Syntaxe
function nom_fonction([les parametres]): type{
// les instructions}
H & H: Research and Training 166 / 218
c© Achref EL MOUELHI c©
Fonctions Typage de valeurs de retour
PHP
Exemple
function somme(int $a, int $b): int{
return $a + $b;}
L’appel ne change pas
$resultat = somme (1, 3);console.log($resultat);/* affiche 4 */
H & H: Research and Training 167 / 218
c© Achref EL MOUELHI c©
Fonctions Typage de valeurs de retour
PHP
Exemple
function somme(int $a, int $b): int{
return $a + $b;}
L’appel ne change pas
$resultat = somme (1, 3);console.log($resultat);/* affiche 4 */
H & H: Research and Training 167 / 218
c© Achref EL MOUELHI c©
Fonctions Typage de valeurs de retour
PHP
Types valides pour les fonctions
int
string
boolean
float
array
object (a voir dans un prochain chapitre)
iterable : parametre iterable avec une structure iterative (for, foreach...)
callable : fonction callback
void : comme valeur de retour indique que la fonction n’a pas de valeur deretour, et comme parametre indique que la fonction n’accepte pas de parametre.
H & H: Research and Training 168 / 218
c© Achref EL MOUELHI c©
Fonctions Typage strict
PHP
Considerons la fonction somme suivante
function somme(int $a, int $b): int{
return $a + $b;}
Comme le montre l’exemple suivant, PHP essayera de convertirles valeurs s’ils ne sont pas de type entier
echo somme("1", 2.5);/* affiche 3 */
H & H: Research and Training 169 / 218
c© Achref EL MOUELHI c©
Fonctions Typage strict
PHP
Considerons la fonction somme suivante
function somme(int $a, int $b): int{
return $a + $b;}
Comme le montre l’exemple suivant, PHP essayera de convertirles valeurs s’ils ne sont pas de type entier
echo somme("1", 2.5);/* affiche 3 */
H & H: Research and Training 169 / 218
c© Achref EL MOUELHI c©
Fonctions Typage strict
Question
Comment interdire l’execution de la fonction si les types de valeurs ne correspondent pas auxtypes des parametres de la fonction.
Solution
Utiliser le mode strict.
Declarer le mode strict au tout debut du fichier
<?phpdeclare(strict_types=1);?>
Appeler une fonction avec des parametres qui ne sont pas entiers implique desormaisune erreur fatale
echo somme("php", 2.5);
H & H: Research and Training 170 / 218
c© Achref EL MOUELHI c©
Fonctions Typage strict
Question
Comment interdire l’execution de la fonction si les types de valeurs ne correspondent pas auxtypes des parametres de la fonction.
Solution
Utiliser le mode strict.
Declarer le mode strict au tout debut du fichier
<?phpdeclare(strict_types=1);?>
Appeler une fonction avec des parametres qui ne sont pas entiers implique desormaisune erreur fatale
echo somme("php", 2.5);
H & H: Research and Training 170 / 218
c© Achref EL MOUELHI c©
Fonctions Typage strict
Question
Comment interdire l’execution de la fonction si les types de valeurs ne correspondent pas auxtypes des parametres de la fonction.
Solution
Utiliser le mode strict.
Declarer le mode strict au tout debut du fichier
<?phpdeclare(strict_types=1);?>
Appeler une fonction avec des parametres qui ne sont pas entiers implique desormaisune erreur fatale
echo somme("php", 2.5);
H & H: Research and Training 170 / 218
c© Achref EL MOUELHI c©
Fonctions Typage strict
Question
Comment interdire l’execution de la fonction si les types de valeurs ne correspondent pas auxtypes des parametres de la fonction.
Solution
Utiliser le mode strict.
Declarer le mode strict au tout debut du fichier
<?phpdeclare(strict_types=1);?>
Appeler une fonction avec des parametres qui ne sont pas entiers implique desormaisune erreur fatale
echo somme("php", 2.5);
H & H: Research and Training 170 / 218
c© Achref EL MOUELHI c©
Fonctions Type Nullable
PHPConsiderons la fonction dire bonjour suivante
function dire_bonjour(string $nom): void{
if ($nom != null) {echo "bonjour $nom";
} else {echo "bonjour doe";
}}
Appeler cette fonction avec une valeur NULL implique une erreur fatale
dire_bonjour(null);
Explication
Les types null et string sont incompatibles.
H & H: Research and Training 171 / 218
c© Achref EL MOUELHI c©
Fonctions Type Nullable
PHPConsiderons la fonction dire bonjour suivante
function dire_bonjour(string $nom): void{
if ($nom != null) {echo "bonjour $nom";
} else {echo "bonjour doe";
}}
Appeler cette fonction avec une valeur NULL implique une erreur fatale
dire_bonjour(null);
Explication
Les types null et string sont incompatibles.
H & H: Research and Training 171 / 218
c© Achref EL MOUELHI c©
Fonctions Type Nullable
PHPConsiderons la fonction dire bonjour suivante
function dire_bonjour(string $nom): void{
if ($nom != null) {echo "bonjour $nom";
} else {echo "bonjour doe";
}}
Appeler cette fonction avec une valeur NULL implique une erreur fatale
dire_bonjour(null);
Explication
Les types null et string sont incompatibles.
H & H: Research and Training 171 / 218
c© Achref EL MOUELHI c©
Fonctions Type Nullable
PHP
Question
Comment autoriser la valeur null pour les autres types?
Solution
En utilisant l’operateur? pour rendre un type nullable
H & H: Research and Training 172 / 218
c© Achref EL MOUELHI c©
Fonctions Type Nullable
PHP
Question
Comment autoriser la valeur null pour les autres types?
Solution
En utilisant l’operateur? pour rendre un type nullable
H & H: Research and Training 172 / 218
c© Achref EL MOUELHI c©
Fonctions Type Nullable
PHP
Modifions la fonction dire bonjour
function dire_bonjour(?string $nom): void{
if ($nom != null) {echo "bonjour $nom";
} else {echo "bonjour doe";
}}
Appeler dire bonjour avec un parametre NULL n’implique plus uneerreur fatale
dire_bonjour(null);/* affiche bonjour doe*/
H & H: Research and Training 173 / 218
c© Achref EL MOUELHI c©
Fonctions Type Nullable
PHP
Modifions la fonction dire bonjour
function dire_bonjour(?string $nom): void{
if ($nom != null) {echo "bonjour $nom";
} else {echo "bonjour doe";
}}
Appeler dire bonjour avec un parametre NULL n’implique plus uneerreur fatale
dire_bonjour(null);/* affiche bonjour doe*/
H & H: Research and Training 173 / 218
c© Achref EL MOUELHI c©
Fonctions Fonctions generatrices
PHP
Fonction generatrice
une fonction PHP
contenant un generateur yield qui retourne autant de valeurs quenecessaire
Exemple d’une fonction qui retourne, a chaque appel, un nombre pairdifferent < 10
function generateur_pair(int $seuil){
for ($i = 0; $i <= $seuil; $i += 2) {yield $i;
}}
H & H: Research and Training 174 / 218
c© Achref EL MOUELHI c©
Fonctions Fonctions generatrices
PHP
Fonction generatrice
une fonction PHP
contenant un generateur yield qui retourne autant de valeurs quenecessaire
Exemple d’une fonction qui retourne, a chaque appel, un nombre pairdifferent < 10
function generateur_pair(int $seuil){
for ($i = 0; $i <= $seuil; $i += 2) {yield $i;
}}
H & H: Research and Training 174 / 218
c© Achref EL MOUELHI c©
Fonctions Fonctions generatrices
PHP
Pour appeler la fonction
foreach (generateur_pair(10) as $value) {echo "$value ";
}/* affiche 0 2 4 6 8 10 */
H & H: Research and Training 175 / 218
c© Achref EL MOUELHI c©
Fonctions Fonctions generatrices
Une fonction generatrice peut retourner aussi un couple (cle, valeur)
function carre(int $seuil) {for ($i = 0; $i <= $seuil; $i++){
yield $i => $i * $i;}
}
Pour appeler la fonction
foreach (carre(5) as $key => $value) {echo "le carre de $key est $value<br>";
}
/* affichele carre de 0 est 0le carre de 1 est 1le carre de 2 est 4le carre de 3 est 9le carre de 4 est 16le carre de 5 est 25*/
H & H: Research and Training 176 / 218
c© Achref EL MOUELHI c©
Fonctions Fonctions generatrices
Une fonction generatrice peut retourner aussi un couple (cle, valeur)
function carre(int $seuil) {for ($i = 0; $i <= $seuil; $i++){
yield $i => $i * $i;}
}
Pour appeler la fonction
foreach (carre(5) as $key => $value) {echo "le carre de $key est $value<br>";
}
/* affichele carre de 0 est 0le carre de 1 est 1le carre de 2 est 4le carre de 3 est 9le carre de 4 est 16le carre de 5 est 25*/
H & H: Research and Training 176 / 218
c© Achref EL MOUELHI c©
Fonctions Fonctions generatrices
PHP
Etant donnee la chaıne de caracteres suivante
$ma_chaine = "Hello les holoulos";
Exercice
Ecrire une fonction generatrice qui retourne chaque fois une voyelle dela chaıne $ma chaine et sa position.
H & H: Research and Training 177 / 218
c© Achref EL MOUELHI c©
Fonctions Fonctions generatrices
PHP
Correction
function detecteur_voyelle(string $str){
$voyelles = "aeouiy";for ($i = 0; $i < strlen($str); $i++) {
if (strpos($voyelles, $str[$i]) !== false)yield $i => $str[$i];
}}foreach (detecteur_voyelle($ma_chaine) as $key => $value)
{echo "position $key : voyelle : $value<br>";
}
H & H: Research and Training 178 / 218
c© Achref EL MOUELHI c©
Fonctions Fonctions generatrices
PHP
Etant donne le tableau a deux dimension suivant
$matrice = array(array(2, 3, 5, 7),array(1, 2, 5, 9, 5),array(4, 2, 9, 3, 1, 5)
);
Exercice
Ecrire une fonction generatrice qui retourne chaque fois les elementspairs de la ligne suivante de la matrice.
H & H: Research and Training 179 / 218
c© Achref EL MOUELHI c©
Fonctions Fonctions generatrices
PHP
Correction
function estPair(int $x): bool{
return $x % 2 == 0;}function pair_ligne_matrice(array $tab){
foreach ($tab as $key => $value) {yield $key => array_filter($value, ’estPair’);
}}foreach (pair_ligne_matrice($matrice) as $key => $value)
{echo "position $key : element.s pair.s : " . implode
("-", $value) . "<br>";}
H & H: Research and Training 180 / 218
c© Achref EL MOUELHI c©
Fonctions Fonctions generatrices
PHPL’instruction yield from permet de retourner un nombre defini dansun tableau
function generer_nombre(){
yield 0;yield from [1, 3, 6, 10];yield 100;
}
Pour appeler la fonction
foreach (generer_nombre() as $value) {echo "$value ";
}
/* affiche 0 1 3 6 10 100 */
H & H: Research and Training 181 / 218
c© Achref EL MOUELHI c©
Fonctions Fonctions generatrices
PHPL’instruction yield from permet de retourner un nombre defini dansun tableau
function generer_nombre(){
yield 0;yield from [1, 3, 6, 10];yield 100;
}
Pour appeler la fonction
foreach (generer_nombre() as $value) {echo "$value ";
}
/* affiche 0 1 3 6 10 100 */
H & H: Research and Training 181 / 218
c© Achref EL MOUELHI c©
Variables locales et globales
PHP
En PHP, une fonction utilise ses variables locales
function afficherNom(){
$nom = "doe";echo $nom;
}
$nom = "wick";afficherNom();// affiche doe
H & H: Research and Training 182 / 218
c© Achref EL MOUELHI c©
Variables locales et globales
PHP
Une fonction peut acceder aux variables definies dans le contexteglobal en utilisant la variable super-globale $GLOBALS (tableauassociatif)
function afficherNom(){
$nom = "doe";echo $GLOBALS[’nom’];
}
$nom = "wick";afficherNom();// affiche wick
H & H: Research and Training 183 / 218
c© Achref EL MOUELHI c©
Math
PHP
PHP Math
API de PHP CORE contenant plusieurs fonctions permettant derealiser des operations mathematiques sur les nombres...
H & H: Research and Training 184 / 218
c© Achref EL MOUELHI c©
Math
Exemple de fonctions calculant l’arrondi
echo round(2.1);/* affiche 2 */
echo round(2.9);/* retourne 3 */
echo ceil(2.1);/* retourne 3 */
echo ceil(2.9);/* retourne 3 */
echo floor(2.1);/* retourne 2 */
echo floor(2.9);/* retourne 2 */
H & H: Research and Training 185 / 218
c© Achref EL MOUELHI c©
Math
Autres fonctions
echo pow(2, 3);/* retourne 8 */
echo sqrt(4);/* retourne 2 */
echo abs(-2);/* retourne 2 */
echo min(0, 1, 4, 2, -4, -5);/* retourne -5 */
echo max(0, 1, 4, 2, -4, -5);/* retourne 4 */
echo rand(10, 100);/* retourne un nombre aleatoire compris entre 10 et 100
*/
H & H: Research and Training 186 / 218
c© Achref EL MOUELHI c©
Math
PHP
Exercice
Ecrire une fonction PHP qui permet de resoudre une equation desecond degre. La fonction retourne un tableau vide si l’equation n’apas de solution, un tableau a deux valeurs si l’equation a deuxsolutions ou un tableau contenant une seule valeur sinon.
H & H: Research and Training 187 / 218
c© Achref EL MOUELHI c©
Date
PHP
PHP Date
API de PHP CORE contenant plusieurs fonctions permettant demanipuler les dates...
H & H: Research and Training 188 / 218
c© Achref EL MOUELHI c©
Date
PHP
Pour creer et retourner la date du jour (string)
echo date("d-m-Y H:i:s");// affiche la date du jour selon le format passe en
parametre
Pour avoir une heure respectant le fuseau horaire de Paris
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
c© Achref EL MOUELHI c©
Date
PHP
Pour creer et retourner la date du jour (string)
echo date("d-m-Y H:i:s");// affiche la date du jour selon le format passe en
parametre
Pour avoir une heure respectant le fuseau horaire de Paris
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
c© Achref EL MOUELHI c©
Date
PHPQuelques autres indices pour les dates
d : le jour du mois (de 01 a 31)
D : une representation textuelle du jour (trois lettres)
j : le jour du mois sans zero (de 1 a 31)
w : une representation numerique du jour (0 pour dimanche, 6 pour samedi)
z : le jour de l’annee (de 0 a 365)
F : une representation textuelle complete du mois (January a December)
m : une representation numerique du mois (de 01 a 12)
M : une representation textuelle courte du mois (trois lettres)
n : une representation numerique du mois, sans le zero au debut (de 1 a 12)
Y : une representation numerique de l’annee (4 chiffres)
y : une representation numerique de l’annee (2 chiffres)
H & H: Research and Training 190 / 218
c© Achref EL MOUELHI c©
Date
PHPQuelques autres indices pour les heures
a : am ou pm en minuscule
A : AM ou PM en majuscule
g : format d’heure de 1 a 12
G : format d’heure de 0 a 23
h : format d’heure de 01 a 12
H : format d’heure de 00 a 23
i : minutes avec un zero au debut (de 00 a 59)
s : secondes avec un zero au debut (de 00 a 59)
u : microsecondes (depuis PHP 5.2.2)
e : fuseau horaire (exemples : UTC, GMT, Atlantic/Azores)
T : abreviations du fuseau horaire (exemples : EST, MDT)
H & H: Research and Training 191 / 218
c© Achref EL MOUELHI c©
Date
PHPPour recuperer le mois actuel
echo date("m");
Pour creer une date a partir d’une chaıne de caracteres
$ma_date = date("d-m-Y H:i:s", strtotime("30-07-2015 10:30:11"));echo $ma_date;// affiche 30-07-2015 10:30:11
Pour generer des dates dans le futur ou dans le passe.
$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
c© Achref EL MOUELHI c©
Date
PHPPour recuperer le mois actuel
echo date("m");
Pour creer une date a partir d’une chaıne de caracteres
$ma_date = date("d-m-Y H:i:s", strtotime("30-07-2015 10:30:11"));echo $ma_date;// affiche 30-07-2015 10:30:11
Pour generer des dates dans le futur ou dans le passe.
$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
c© Achref EL MOUELHI c©
Date
PHPPour recuperer le mois actuel
echo date("m");
Pour creer une date a partir d’une chaıne de caracteres
$ma_date = date("d-m-Y H:i:s", strtotime("30-07-2015 10:30:11"));echo $ma_date;// affiche 30-07-2015 10:30:11
Pour generer des dates dans le futur ou dans le passe.
$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
c© Achref EL MOUELHI c©
Date
PHP
Remarque
mktime retourne un timestamp (entier) correspondant au nombrede secondes ecoulees depuis le debut de l’epoque UNIX(01/01/1970 00 :00 :00 GMT) et le temps passe en parametre.
time() retourne le timestamp UNIX actuel
H & H: Research and Training 193 / 218
c© Achref EL MOUELHI c©
Date
PHP
Pour recuperer une date en francais, on utilise strftime qui accepte les options suivantes
%A : une representation textuelle complete du jour
%a : une representation textuelle courte du jour
%e : le jour du mois (de 1 a 31)
%d : le jour du mois (de 01 a 31)
%j : le jour de l’annee (de 1 a 366)
%u : une representation numerique du jour (de 1 pour lundi au 7 pour dimanche)
%m : une representation numerique du mois (de 01 a 12)
%b : une representation textuelle courte du mois
%B : une representation textuelle complete du mois
%Y : une representation numerique de l’annee (4 chiffres)
%y : une representation numerique de l’annee (2 chiffres)
%H : heure de 00 a 23
%I : heure de 00 a 12
%M : minute
%S : seconde
H & H: Research and Training 194 / 218
c© Achref EL MOUELHI c©
Date
PHP
Exemple
setlocale(LC_TIME, ’fr_FR’);$now = mktime(8, 20, 50, date("m"), date("d"), date(
"Y"));echo strftime("%A %e %B %y %H:%M:%S", $now);// affiche mardi 17 mars 20 08:20:50
H & H: Research and Training 195 / 218
c© Achref EL MOUELHI c©
Date
PHP
Exemple avec checkdate qui retourne true si la date passee enparametre est correcte, false sinon.
var_dump(checkdate(1, 31, -400));/* affiche false */
var_dump(checkdate(2, 29, 2019));/* affiche false */
var_dump(checkdate(2, 29, 2020));/* affiche true */
var_dump(checkdate(30, 7, 2004));/* affiche false */
H & H: Research and Training 196 / 218
c© Achref EL MOUELHI c©
Date
PHP
Autres fonctions pour les dates (DateTime)
date create() : cree et retourne une DateTime en utilisant unedate sous forme d’une chaıne de caractere et un fuseau horaire
date modify() : retourne une DateTime modifiee en fonctiond’un texte exprime en anglais
date format() : retourne une chaıne de caractere construite apartir d’une DateTime et un format
date diff() : retourne la difference entre deux dates
date timestamp get() : retourne le timestamp d’uneDataTime passee en parametre
...
H & H: Research and Training 197 / 218
c© Achref EL MOUELHI c©
Date
PHPExemple 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 decalage d’une heure
Pour avoir l’heure exacte, il faut preciser le fuseau horaire
$date = date_create("", timezone_open("Europe/Paris"));echo date_format($date,"d-m-Y H:i:s");// affiche les date et heure exactes
On peut aussi utiliser date create pour creer une DateTime d’une autre date
$date = date_create("2018-07-30 21:30:10"); // obligatoirementannee-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
c© Achref EL MOUELHI c©
Date
PHPExemple 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 decalage d’une heure
Pour avoir l’heure exacte, il faut preciser le fuseau horaire
$date = date_create("", timezone_open("Europe/Paris"));echo date_format($date,"d-m-Y H:i:s");// affiche les date et heure exactes
On peut aussi utiliser date create pour creer une DateTime d’une autre date
$date = date_create("2018-07-30 21:30:10"); // obligatoirementannee-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
c© Achref EL MOUELHI c©
Date
PHPExemple 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 decalage d’une heure
Pour avoir l’heure exacte, il faut preciser le fuseau horaire
$date = date_create("", timezone_open("Europe/Paris"));echo date_format($date,"d-m-Y H:i:s");// affiche les date et heure exactes
On peut aussi utiliser date create pour creer une DateTime d’une autre date
$date = date_create("2018-07-30 21:30:10"); // obligatoirementannee-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
c© Achref EL MOUELHI c©
Date
PHP
Exemple avec date diff
$date1 = date_create("2017-03-29");$date2 = date_create("2017-07-30");$diff = date_diff($date1, $date2);
echo ($diff->days);/* affiche 123 */
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
c© Achref EL MOUELHI c©
Date
PHP
Exemple avec date diff
$date1 = date_create("2017-03-29");$date2 = date_create("2017-07-30");$diff = date_diff($date1, $date2);
echo ($diff->days);/* affiche 123 */
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
c© Achref EL MOUELHI c©
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>";/* affiche 16-01-2018 00:00:00 */
date_modify($date,"-1 week");echo date_format($date,"d-m-Y H:i:s") . "<br>";/* affiche 09-01-2018 00:00:00 */
date_modify($date,"+3 months");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
c© Achref EL MOUELHI c©
Date
PHP
On peut aussi creer une DateTime en utilisant par la classe
$date = new DateTime(’2008-07-30’);echo $date->format(’d-m-Y H:i:s’);// affiche 30-07-2008 00:00:00
L’equivalent en programmation procedurale du code precedent
$date = 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
c© Achref EL MOUELHI c©
Date
PHP
On peut aussi creer une DateTime en utilisant par la classe
$date = new DateTime(’2008-07-30’);echo $date->format(’d-m-Y H:i:s’);// affiche 30-07-2008 00:00:00
L’equivalent en programmation procedurale du code precedent
$date = 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
c© Achref EL MOUELHI c©
Date
PHPOn peut utiliser date diff pour calculer la difference entre deux DateTimecreee de deux manieres differentes
$date1 = date_create("2017-03-29");$date2 = new DateTime(’2017-07-30’);$diff = date_diff($date1, $date2);
echo ($diff->days);/* affiche 123 */
Ou aussi
$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
c© Achref EL MOUELHI c©
Date
PHPOn peut utiliser date diff pour calculer la difference entre deux DateTimecreee de deux manieres differentes
$date1 = date_create("2017-03-29");$date2 = new DateTime(’2017-07-30’);$diff = date_diff($date1, $date2);
echo ($diff->days);/* affiche 123 */
Ou aussi
$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
c© Achref EL MOUELHI c©
Date
PHP
Etant donnees les trois variables suivantes
$mois = 12;$jour = 31;$annee = 2019;
Exercice
Ecrivez un script PHP qui permet de verifier si les trois variablesprecedentes forment une date valide. Si oui, le script affiche ladifference en nombre de jours entre cette date et la date courante.
H & H: Research and Training 203 / 218
c© Achref EL MOUELHI c©
Date
PHP
Etant donnees les trois variables suivantes
$mois = 12;$jour = 31;$annee = 2019;
Exercice
Ecrivez un script PHP qui permet de verifier si les trois variablesprecedentes forment une date valide. Si oui, le script affiche ladifference en nombre de jours entre cette date et la date courante.
H & H: Research and Training 203 / 218
c© Achref EL MOUELHI c©
Date
PHP
Correction
$mois = $_GET[’mois’] ?? 12;$jour = $_GET[’jour’] ?? 31;$annee = $_GET[’annee’] ?? 2019;if (checkdate($mois, $jour, $annee)) {
$date1 = date_create("$annee-$mois-$jour");$date2 = new DateTime();$diff = $date2->diff($date1);echo $diff->days;
} else {echo "date incorrecte";
}
H & H: Research and Training 204 / 218
c© Achref EL MOUELHI c©
Date
PHP
La fonction date create accepte un seul format de date. On peututiliser la fonction date create from format qui accepte unformat personnalise
$motif = "d/m/Y H:i:s";$date = date_create_from_format($motif ,’10/04/2020
08:15:00’);
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
c© Achref EL MOUELHI c©
Date
PHP
La fonction date create accepte un seul format de date. On peututiliser la fonction date create from format qui accepte unformat personnalise
$motif = "d/m/Y H:i:s";$date = date_create_from_format($motif ,’10/04/2020
08:15:00’);
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
c© Achref EL MOUELHI c©
Fichiers
PHP
Les fichiers
Utilises pour stocker et/ou echanger les donnees
Pouvant etre en ecriture ou en lecture
3 etapes pour la manipulation de fichiers en PHP
Ouverture
Utilisation : ecriture ou lecture
Fermeture
H & H: Research and Training 206 / 218
c© Achref EL MOUELHI c©
Fichiers
PHP
Les fichiers
Utilises pour stocker et/ou echanger les donnees
Pouvant etre en ecriture ou en lecture
3 etapes pour la manipulation de fichiers en PHP
Ouverture
Utilisation : ecriture ou lecture
Fermeture
H & H: Research and Training 206 / 218
c© Achref EL MOUELHI c©
Fichiers Ouverture
PHPSyntaxe
$mon_logique = fopen (nom_physique, mode_ouverture);
Quatre modes d’ouverture
a : ouvre le fichier, s’il existe, en ecriture seule place le pointeur a la fin dufichier. S’il n’existe pas,il sera automatiquement cree.
a+ : ouvre le fichier en lecture et ecriture. Si le fichier n’existe pas, il seraautomatiquement cree. S’il existe, le texte sera ajoute a la fin.
r : ouvre le fichier en lecture seule et place le pointeur au debut du fichier. Si lefichier n’existe pas, il ne sera pas cree.
r+ : ouvre le fichier en lecture et ecriture, et place le pointeur au debut du fichier.Si le fichier n’existe pas, il ne sera pas cree.
...
H & H: Research and Training 207 / 218
c© Achref EL MOUELHI c©
Fichiers Ouverture
PHPSyntaxe
$mon_logique = fopen (nom_physique, mode_ouverture);
Quatre modes d’ouverture
a : ouvre le fichier, s’il existe, en ecriture seule place le pointeur a la fin dufichier. S’il n’existe pas,il sera automatiquement cree.
a+ : ouvre le fichier en lecture et ecriture. Si le fichier n’existe pas, il seraautomatiquement cree. S’il existe, le texte sera ajoute a la fin.
r : ouvre le fichier en lecture seule et place le pointeur au debut du fichier. Si lefichier n’existe pas, il ne sera pas cree.
r+ : ouvre le fichier en lecture et ecriture, et place le pointeur au debut du fichier.Si le fichier n’existe pas, il ne sera pas cree.
...
H & H: Research and Training 207 / 218
c© Achref EL MOUELHI c©
Fichiers Fermeture
PHP
Syntaxe
fclose (nom_fichier);
H & H: Research and Training 208 / 218
c© Achref EL MOUELHI c©
Fichiers Fermeture
Quelques fonctions sur les fichiers
file exists : retourne true si le fichier passe en parametre existe, false sinon.
is dir : retourne true si le parametre correspond a un dossier, false sinon.
is file : retourne true si le parametre correspond a un fichier, false sinon.
feof : retourne true si le pointeur est a la fin du fichier ou si une erreur survient, falsesinon.
unlink : permet de supprimer un fichier. Elle retourne true en cas de succes, falsesinon.
copy : permet de copier un fichier. Elle retourne true en cas de succes, false sinon.
rename : permet de renommer un dossier ou fichier.
glob : retourne un tableau contenant les noms de dossiers et fichiers respectant un motifpasse en parametre.
filesize : retourne la taille d’un fichier (nombre d’octets)
...
H & H: Research and Training 209 / 218
c© Achref EL MOUELHI c©
Fichiers Fermeture
PHP
Exemple
if (file_exists("file.txt")) {echo "fichier trouve";
} else {echo "fichier non trouve";
}
H & H: Research and Training 210 / 218
c© Achref EL MOUELHI c©
Fichiers Utilisation
PHP
Quelques fonctions d’ecriture
fwrite : ecrit une chaıne de caractere dans un fichier et retournele nombre d’octets ecrits, ou false si une erreur survient.
fputs : alias de fwrite
file put contents = fopen + fwrite + fclose : Si le fichiern’existe pas, il sera cree. Sinon, le fichier existant sera ecrase.Ajoutez une constante FILE APPEND comme troisieme parametrepour ajouter les donnees au fichier au lieu de l’ecraser..
...
H & H: Research and Training 211 / 218
c© Achref EL MOUELHI c©
Fichiers Utilisation
PHPExemple d’ecriture dans un fichier
if (file_exists("file.txt")) {$mon_fichier = fopen ("file.txt","a");$nbr_octet = fwrite($mon_fichier, "bonjour");echo $nbr_octet;fclose ($mon_fichier);
} else {echo "fichier non trouve";
}
Pour refaire la meme chose avec file put contents
if (file_exists("file.txt")) {$nbr_octet = file_put_contents("file.txt", "bonjour");echo $nbr_octet;
} else {echo "fichier non trouve";
}
H & H: Research and Training 212 / 218
c© Achref EL MOUELHI c©
Fichiers Utilisation
PHPExemple d’ecriture dans un fichier
if (file_exists("file.txt")) {$mon_fichier = fopen ("file.txt","a");$nbr_octet = fwrite($mon_fichier, "bonjour");echo $nbr_octet;fclose ($mon_fichier);
} else {echo "fichier non trouve";
}
Pour refaire la meme chose avec file put contents
if (file_exists("file.txt")) {$nbr_octet = file_put_contents("file.txt", "bonjour");echo $nbr_octet;
} else {echo "fichier non trouve";
}
H & H: Research and Training 212 / 218
c© Achref EL MOUELHI c©
Fichiers Utilisation
PHP
Quelques fonctions de lecture
file get contents : retourne tout le contenu d’un fichier dans une chaıne decaracteres.
fgets : retourne la ligne courante d’un fichier dans une chaıne de caracteres.
fgetss : retourne la ligne courante du fichier et elimine les balises HTML.
fgetc : retourne un caractere d’un fichier.
file : retourne un fichier sous forme d’un tableau de chaınes de caracteres.
filemtime : retourne la date de la derniere modification du fichier.
...
H & H: Research and Training 213 / 218
c© Achref EL MOUELHI c©
Fichiers Utilisation
PHPExemple de lecture
if (file_exists("file.txt")) {$mon_fichier = fopen ("file.txt","r");$contenu = fgets($mon_fichier);echo ($contenu);fclose ($mon_fichier);
} else {echo "fichier non trouve";
}
Pour refaire la meme chose avec file get contents
if (file_exists("file.txt")) {$contenu = file_get_contents("file.txt");echo $contenu;
} else {echo "fichier non trouve";
}
H & H: Research and Training 214 / 218
c© Achref EL MOUELHI c©
Fichiers Utilisation
PHPExemple de lecture
if (file_exists("file.txt")) {$mon_fichier = fopen ("file.txt","r");$contenu = fgets($mon_fichier);echo ($contenu);fclose ($mon_fichier);
} else {echo "fichier non trouve";
}
Pour refaire la meme chose avec file get contents
if (file_exists("file.txt")) {$contenu = file_get_contents("file.txt");echo $contenu;
} else {echo "fichier non trouve";
}
H & H: Research and Training 214 / 218
c© Achref EL MOUELHI c©
Fichiers Utilisation
PHP
Exercice
Ecrivez un script PHP qui permet de lire tout le contenu d’un fichier enutilisant fgets.
H & H: Research and Training 215 / 218
c© Achref EL MOUELHI c©
Fichiers Utilisation
Premiere solution
if (file_exists("file.txt")) {$mon_fichier = fopen("file.txt", "r");while ($contenu = fgets($mon_fichier)) {
echo $contenu . ’<br>’;}fclose($mon_fichier);
} else {echo "fichier non trouve";
}
Deuxieme solution
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 trouve";
}
H & H: Research and Training 216 / 218
c© Achref EL MOUELHI c©
Fichiers Utilisation
Premiere solution
if (file_exists("file.txt")) {$mon_fichier = fopen("file.txt", "r");while ($contenu = fgets($mon_fichier)) {
echo $contenu . ’<br>’;}fclose($mon_fichier);
} else {echo "fichier non trouve";
}
Deuxieme solution
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 trouve";
}
H & H: Research and Training 216 / 218
c© Achref EL MOUELHI c©
Fichiers Utilisation
PHP
Etant donne le fichier file.txt ayant le contenu suivant
151217131016
Exercice
Ecrivez un script PHP qui permet de calculer la moyenne des valeursdefinies dans file.txt.
H & H: Research and Training 217 / 218
c© Achref EL MOUELHI c©
Fichiers Utilisation
PHP
Etant donne le fichier file.txt ayant le contenu suivant
151217131016
Exercice
Ecrivez un script PHP qui permet de calculer la moyenne des valeursdefinies dans file.txt.
H & H: Research and Training 217 / 218
c© Achref EL MOUELHI c©
Fichiers Utilisation
PHP
Correction
if (file_exists("file.txt")) {$contenu = file("file.txt");echo max($contenu);
} else {echo "fichier non trouve";
}
H & H: Research and Training 218 / 218