PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite...

344
PHP : les fondamentaux Achref El Mouelhi Docteur de l’universit ´ e d’Aix-Marseille Chercheur en programmation par contrainte (IA) Ing ´ enieur en g ´ enie logiciel [email protected] H & H: Research and Training 1 / 218

Transcript of PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite...

Page 1: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

PHP : les fondamentaux

Achref El Mouelhi

Docteur de l’universite d’Aix-MarseilleChercheur en programmation par contrainte (IA)

Ingenieur en genie logiciel

[email protected]

H & H: Research and Training 1 / 218

Page 2: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 3: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 4: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 5: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

Plan

12 Variables locales et globales

13 Math

14 Date

15 FichiersOuvertureFermetureUtilisation

H & H: Research and Training 5 / 218

Page 6: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 7: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 8: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 9: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 10: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 11: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 12: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 13: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 14: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 15: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 16: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 17: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

c© Achref EL MOUELHI c©

Introduction

PHP

Exemple d’IDE pour PHP

Eclipse

Netbeans

WebStorm

PHPStorm

...

H & H: Research and Training 14 / 218

Page 18: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 19: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 20: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

c© Achref EL MOUELHI c©

Introduction

PHP

H & H: Research and Training 17 / 218

Page 21: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

c© Achref EL MOUELHI c©

Introduction

PHP

H & H: Research and Training 17 / 218

Page 22: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 23: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 24: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 25: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 26: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 27: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 28: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 29: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 30: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 31: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 32: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 33: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 34: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 35: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 36: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 37: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 38: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 39: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 40: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 41: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 42: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 43: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 44: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 45: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 46: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 47: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 48: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 49: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 50: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 51: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 52: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 53: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 54: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 55: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 56: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 57: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 58: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 59: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 60: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 61: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 62: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 63: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 64: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 65: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 66: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 67: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 68: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 69: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 70: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 71: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 72: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 73: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 74: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 75: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 76: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 77: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 78: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 79: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 80: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 81: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 82: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 83: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 84: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 85: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 86: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 87: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 88: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 89: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 90: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 91: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 92: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 93: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 94: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 95: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 96: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 97: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 98: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 99: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 100: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 101: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 102: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 103: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 104: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 105: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 106: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 107: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 108: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 109: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 110: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 111: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 112: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 113: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 114: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 115: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 116: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 117: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 118: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 119: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 120: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 121: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 122: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 123: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 124: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 125: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 126: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 127: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 128: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 129: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 130: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 131: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 132: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 133: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 134: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 135: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 136: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 137: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 138: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 139: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 140: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 141: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 142: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 143: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 144: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 145: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 146: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 147: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 148: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 149: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 150: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 151: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 152: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 153: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 154: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 155: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 156: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 157: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 158: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 159: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 160: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 161: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 162: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 163: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 164: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 165: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 166: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 167: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 168: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 169: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 170: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 171: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 172: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 173: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 174: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 175: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 176: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 177: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 178: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 179: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 180: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 181: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 182: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 183: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 184: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 185: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 186: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 187: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 188: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 189: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 190: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 191: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 192: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 193: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 194: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 195: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 196: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 197: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 198: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 199: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 200: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 201: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 202: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 203: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 204: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 205: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 206: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 207: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 208: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 209: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 210: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 211: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 212: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 213: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 214: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 215: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 216: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 217: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 218: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 219: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 220: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 221: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 222: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 223: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 224: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 225: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 226: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 227: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 228: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 229: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 230: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 231: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 232: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 233: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 234: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 235: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 236: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 237: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 238: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 239: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 240: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 241: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 242: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 243: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 244: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 245: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 246: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 247: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 248: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 249: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 250: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 251: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 252: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 253: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 254: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 255: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 256: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 257: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 258: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 259: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 260: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 261: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 262: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 263: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 264: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 265: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 266: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 267: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 268: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 269: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 270: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 271: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 272: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 273: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 274: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 275: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 276: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 277: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 278: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 279: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 280: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 281: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 282: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 283: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 284: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 285: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 286: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 287: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 288: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 289: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 290: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 291: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 292: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 293: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 294: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 295: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 296: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 297: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 298: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 299: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 300: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 301: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 302: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 303: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 304: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 305: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 306: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 307: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 308: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 309: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 310: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 311: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 312: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 313: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 314: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 315: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 316: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 317: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 318: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 319: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 320: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 321: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 322: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 323: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 324: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 325: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 326: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 327: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 328: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 329: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 330: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

c© Achref EL MOUELHI c©

Fichiers Fermeture

PHP

Syntaxe

fclose (nom_fichier);

H & H: Research and Training 208 / 218

Page 331: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 332: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 333: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 334: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 335: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 336: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 337: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 338: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 339: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 340: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 341: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 342: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 343: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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

Page 344: PHP : les fondamentaux - LSISPHP: les fondamentaux Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie

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