Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea...

40
Technologies du Web PHP (cont.) Par Elena CABRIO Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1

Transcript of Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea...

Page 1: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

Technologies du WebPHP (cont.)

Par Elena CABRIO

Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi

18/03/2020 Technologies du Web – ELENA CABRIO 1

Page 2: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

Fonctions utiles pour les tableaux

18/03/2020 Technologies du Web – ELENA CABRIO 2

Pour ré-indexer : array_values()

$a = array(0 => 'un', 1 => 'deux', 2 => 'trois');

unset($a[1]);

/* Cela va produire un tableau qui aurait été

$a = array(0 => 'un', 2 => 'trois')

et non pas

$a = array(0 => 'un', 1 =>'trois'); */

$b = array_values($a); //Maintenant b est le tableau array(0 =>

'un', 1 =>'trois')

sort($tab, flag) : tri

SORT_REGULAR ; SORT_NUMERIC ; SORT_STRING

Page 3: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

Tests sur les Variables

Pour connaitre le type :

gettype( ) (retourne une chaine)

Fonctions qui retournent un booleén : is_array( ), is_float( ), is_int( ), is_object( )

et is_string( ).

isset : pour savoir si elle(s) existe(nt) :

retourne vrai ou faux

permet de savoir si la variable « nom » existe

isset($variable)

isset($v1, $v2, $v3)

18/03/2020 Technologies du Web – ELENA CABRIO 3

Page 4: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

Un élément d’un tableau dans une chaine<?php

/* Ces exemples sont spécifiques à l'utilisation de tableaux dans une chaîne. Lorsque vous êtes hors

d'une chaîne, utilisez toujours des guillemets autour des index de tableau, et n'utilisez pas

d'{accolades}. */

// le tableau

$fruits = array('fraise' => 'rouge', 'banane' => 'jaune');

// Affiche « Array »

echo "$fruits\n";

// Erreur

// echo "Une banane est $fruits['banane']". \n";

// Fonctionne

echo "Une banane est {$fruits['banane']}. \n";

// Fonctionne mais PHP cherche une constante appelée banane tel que décrit ci-dessous Notice voire

erreur

echo "Une banane est {$fruits[banane]}. \n";

// Fonctionne

echo "Une banane est " . $fruits['banane'] . ". \n";

?>

18/03/2020 Technologies du Web – ELENA CABRIO 4

Page 5: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

Foreach

C'est un moyen simple de passer en revue un tableau

Deux syntaxes

À chaque itération, la valeur de l'élément courant est assignée à $value et le pointeur interne à la liste (tableau) est avancé d'un élément

ce qui fait qu'à la prochaine itération, on accédera à l'élément suivant.

foreach($tableau as $value) { /*

$value prend successivement toutes les valeurs

contenues dans $tableau

toutes les instructions faites dans ce bloc sont

exécutées pour

chaque valeur

*/}

18/03/2020 Technologies du Web – ELENA CABRIO 5

Page 6: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

Foreach et indice / clef

foreach($tableau as $clef => $valeur) { /*

$valeur prend successivement toutes les valeurs contenues

dans $tableau. Dans le même temps, $clef correspond à

l’indice (ou la clef) de cette valeur dans le tableau.

Toutes les instructions faites dans ce bloc sont

exécutées pour chaque couple (clef, valeur)

*/

}

18/03/2020 Technologies du Web – ELENA CABRIO 6

Page 7: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

Example foreach $k=>$v

$liste = glob("news/politique/*.news");

/* $liste contient 5 éléménts, 01.news, 02.news, …, 05.news */

foreach($liste as $indice => $f) {

/*

Il y aura 5 itérations, car il y a 5 éléments

les couples ($indice, $f) seront successivement:

(0, "news/politique/01.news")

(1, "news/politique/02.news")

(2, "news/politique/03.news")

(3, "news/politique/04.news")

(4, "news/politique/05.news")

*/

}

18/03/2020 Technologies du Web – ELENA CABRIO 7

Page 8: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

Boucle FOR: pour $x allant de… à...

Exécute une itération à chaque passage de la boucle

Itération sur les indices

Ou pour «n» iterations

Il faut préciser:

l’initialisation du compteur d’iteration

On peut commencer à 0; à 2; etc..

Attention aux indices d’un tableau

la condition d’arrêt de la boucle;

la ou les instructions faisant évoluer ces valeurs à chaque itération

Limite supérieur si le compteur augmente

Limite inférieur si le compteur diminue

18/03/2020 Technologies du Web – ELENA CABRIO 8

Page 9: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

Exemple FOR: avec fichier// lecture d’un fichier

$lecture_fichier= file("news/politique/01.news");

$nb_lignes= count($lecture_fichier);

$contenu_article= "";

/* exemple de boucle à rebours

il faut faire bien attention au test de fin

et à l’évolution de la variable d’itération */

for($cpt = $nb_lignes; $cpt >= 2; $cpt--) {

/* on inverse le contenu du fichier */

/* en ne gardant pas les 2 premieres lignes */

$contenu_article.= $lecture_fichier[$cpt];

}

18/03/2020 Technologies du Web – ELENA CABRIO 9

Page 10: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

Passage de paramètre à une page En attendant les formulaires…

18/03/2020 Technologies du Web – ELENA CABRIO 10

Page 11: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

D’une page à une autre

Chaque page exécutée (ou obtenue) indépendamment

Continuité dans la navigation, dans l’interaction

Comment partager des valeurs ?

Persistance à long terme (fichiers, bd)

Persistance à court terme (session)

Formulaires (saisie par l’utilisateur)

Paramètre dans l’url et lien spécifique

18/03/2020 Technologies du Web – ELENA CABRIO 11

Page 12: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

Dans l’url

Ajout à la fin de l’url

http://serveur.domaine/chemin/page?variable=valeur

Une variable dans une url se définit par

Un nom

Une valeur (après égal)

Plusieurs variables possibles

Séparation par des & entre les variables

https://www.google.fr/search?q=Philippe+Renevier-

Gonin&aq=f&oq=Philippe+Renevier-

Gonin&aqs=chrome.0.59j61l3j0j62.6424&sourceid=chrome&ie=UTF

-8

Fonctionne dans des liens <a href="…?q=Philippe+Renevier-Gonin&aq=f">

18/03/2020 Technologies du Web – ELENA CABRIO 12

Page 13: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

Récupérer la valeur dans php $_GET

Variable super globale

http://www.php.net/manual/fr/language.variables.superglobals.php

Un tableau associatif des valeurs passées au script courant via les paramètres d'URL.

Les clefs sont les noms des variables de l’url

Les valeurs sont définies après le signe = (et avant le &)

Des chaines de caractères !

C.f. Conversion en int…

Encodage de l’url

Encodage avec urlencode ou rawurldecode

Décodage déjà fait avec $_GET

Utilisable directement avec urldecode ou rawurldecode

http://www.faqs.org/rfcs/rfc3986.html

18/03/2020 Technologies du Web – ELENA CABRIO 13

Page 14: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

Tester si une variable passée par url existe

$val = "valeur par defaut";

If ( isset($_GET["variable"]) )

{

$val = $_GET["variable"];

// déjà décodé (codage url comme %20)

// faire des tests sur les valeurs…

// conversion

}

18/03/2020 Technologies du Web – ELENA CABRIO 14

Page 15: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

Fichier : lecture simple

18/03/2020 Technologies du Web – ELENA CABRIO 15

Page 16: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

Fichier(s) et persistance

Enregistrer les données sur un disque dur

Pérennité

Partage ou pas

(configuration de apache)

(sauvegarde en dehors du web)

Souplesse de programmation

aucun format imposé

Mais code « bas niveau »

18/03/2020 Technologies du Web – ELENA CABRIO 16

Page 17: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

Informations sur les fichiers Équivalent des opérations sur les fichiers fournies par les systèmes d’exploitation

glob ( $pattern) : recherche des chemins qui vérifient une expression $pattern

<?php

$files = glob("*.php"); // que les fichiers php du dossier courant

foreach ($files as $filename) {

echo "<a href=‘$filename’>".basename($filename)."</a><br />\n";

}

?>

is_dir ($nomFichier) -- Indique si le fichier est un dossier

is_file ($nomFichier) -- Indique si le fichier est un fichier

is_readable ($nomFichier) -- Indique si un fichier est autorisé en lecture

is_writable ($nomFichier) -- Indique si un fichier est autorisé en écriture

Les résultats de ces fonctions sont mis en cache

18/03/2020 Technologies du Web – ELENA CABRIO 17

Page 18: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

Entrées / Sorties avec les fichiers

file($nomFichier)

Lecture de tout un fichier sous forme d’un tableau de string, 1 ligne = une

case

Fin de ligne présent

rtrim($str) : enlève les « espaces » à la fin de $str

url possible

18/03/2020 Technologies du Web – ELENA CABRIO 18

Page 19: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

Exemple avec « file »

18/03/2020 Technologies du Web – ELENA CABRIO 19

Fichier info.txt

Ce fichier contient :

1. Plusieurs Lignes

2. Avec différentes informations

departement: 06

Numero fichier : 1

Traitement en php :

$contenu = file("info.txt");

// $contenu[0]=="Ce fichier contient :\n"

// $contenu[1]=="1. Plusieurs Lignes\n"

// $contenu[2]=="2. Avec différentes

informations\n"

// $contenu[3]=="departement: 06\n"

// $contenu[4]=="Numero fichier : 1"

// pour extraire le 1 : explode et cast

$tmp = explode(":", $contenu[4]);

// $tmp[0]=="Numero fichier "

// $tmp[1]==" 1"

$numFichier = intval($tmp[1]);

// $numFichier vaut 1

Page 20: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

Entrées / Sorties avec les fichiers

file_get_contents($nomFichier, [, bool $use_include_path = false [, resource

$context [, int $offset = -1 [, int $maxlen ]]]])

Idem file, mais le résultat est dans une chaine

Possibilité de préciser une sous partie (par des octets)

Utilisation possible de include_path de php.ini pour rechercher le fichier

$context : NULL (si on n’en utilise pas)

file_put_contents(string $nomFichier, mixed $data [, int $flags = 0 [,

resource $context ]])

Pour écrire dans un fichier

$date : string ou tableau (ou stream resource)

$flags : FILE_USE_INCLUDE_PATH ou FILE_APPEND ou LOCK_EX

18/03/2020 Technologies du Web – ELENA CABRIO 20

Page 21: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

Fonctions

Prédefinies: fonctions en PHP par défaut.

Définies par l’utilisateur

18/03/2020 Technologies du Web – ELENA CABRIO 21

Page 22: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

Fonctions

Définition : Les fonctions en PHP doivent être définies avant leur appel. Le nom d’une fonction ne commence pas par ’$’, et n’est pas sensible à l’utilisation des majuscules/minuscules. Voici la syntaxe :

function nom($chemin)

{

$fichier = explode("/",$chemin);

$fichier = $fichier[count($fichier)-1];

return $fichier;

}

Toutes les fonctions en PHP ont une portée globale

Les variables à l’intérieur des fonctions ont une portée locale

La récursivité est possible

18/03/2020 Technologies du Web – ELENA CABRIO 22

Page 23: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

FONCTIONS : Passage des arguments

par valeur :

Les arguments sont passés généralement par valeur,

ce qui signifie qu’une copie des variables est faite au moment de l’appel

de la fonction,

et que les éventuelles modifications faites dans le corps de la fonction sur

les arguments n’ont qu’un effet local.

i.e., une fois la fonction terminée, les modifications sont « oubliées »

par adresse (non abordé ici)

18/03/2020 Technologies du Web – ELENA CABRIO 23

Page 24: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

FONCTIONS : Passage des arguments

Valeurs par défaut pour un ou plusieurs arguments d’une fonction.

La valeur par défaut d'un argument doit obligatoirement être une constante, et ne peut être ni une variable, ni un membre de classe, ni un appel de fonction.

Il est à noter que si vous utilisez des arguments avec valeur par défaut avec d'autres sans valeur par défaut, ceux avec une valeur par défaut doivent être à la fin.

function Connexion ($pNom, $pMotPass, $pBase = "clubvideo", $pServeur = "toto")

{ // Ici le code de la fonction }

// on peut donc appeler cette fonction sans citer les deux derniers arguments

$connexion1 = Connexion ("dupond", "passdupond");

$connexion2 = Connexion ("dupont", "passdupont", "Films");

18/03/2020 Technologies du Web – ELENA CABRIO 24

Page 25: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

FONCTIONS les fonctions sont à nombre d'arguments variable.

Possible avec les fonctions suivantes :

func_num_args( ) [pas de paramètre, retourne le nombre d'arguments passés à la fonction],

func_get_arg( ) [un paremètre i : retourne le (i+1)ième élément de la liste des arguments]

et func_get_args( ) [pas de paramètre, retourne les arguments d'une fonction sous forme de tableau]

Fonctions et variables : PHP propose trois types de variables (la même terminologie du C) :

Variables automatiques (pas de portée à l’extérieur)

Variables statiques ( persistantes entre les appels)

Variables globales (mot clef « global »)

18/03/2020 Technologies du Web – ELENA CABRIO 25

Page 26: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

FONCTIONS Les valeurs de retour

Les valeurs sont renvoyées en utilisant une instruction de retour optionnelle. Tous les types de variables peuvent être renvoyés, tableaux et objets compris. Cela fait que la fonction finit son exécution immédiatement et passe le contrôle à la ligne appelante.

c.f. return( )

function maFonction() {

// ….

return $unResultat;}

$resultat = maFonction();

18/03/2020 Technologies du Web – ELENA CABRIO 26

Page 27: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

return

Si appelée depuis une fonction, la commande return termine

immédiatement la fonction, et retourne l'argument qui lui est

passé.

Si appelée depuis l'environnement global, l'exécution du script

est interrompue.

Si le script courant était include( ) ou require( ), alors le contrôle est

rendu au script appelant, et la valeur retournée sera utilisée comme

résultat de la fonction include( ).

Si return( ) est appelée depuis le script principal, alors l'exécution du

script s'arrête.

18/03/2020 Technologies du Web – ELENA CABRIO 27

Page 28: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

Exemple : calcul de différence de temps

Calcul depuis la rentrée et jusqu’à l’été

Deux parties de code très ressemblantes

Démarche :

Identification du code commun (conception)

Factorisation

Amélioration (partagée)

Partage entre fichier

18/03/2020 Technologies du Web – ELENA CABRIO 28

Page 29: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

Identification du code « identique »

18/03/2020 Technologies du Web – ELENA CABRIO 29

En principes pour les

jours, les heures, les

minutes et les secondes

Page 30: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

Organisation du code : la fonction Pour les séquences identifiées, il faut identifier

Ce qui les distingue : variables externes

Variables en entrée => les paramètres des fonctions

La date de référence, mais sous quel format ?

now ?

Ce qu’elles produisent

Quel résultat à la fonction

Un paragraphe

Ce qui les sépare : généralisation du code

Déterminer les « structures de contrôles » (if, …)

Est-ce avant ou après ?

Il ne reste qu’à trouver un nom à la fonction

18/03/2020 Technologies du Web – ELENA CABRIO 30

Page 31: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

Structure de la fonction calculeDelaifunction calculeDelai($dateReference)

{

$resultat = "";

$date = strtotime($dateReference);

$diff = $date-strtotime("now");

if ($diff < 0) {

// c'est avant

}

else {

// c'est apres

}

return $resultat;

}

18/03/2020 Technologies du Web – ELENA CABRIO 31

Page 32: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

Réflexion sur « l’algorithme »

Production si la date est avant

Il s'est passé 20 jours, 11 heures, 1 minute et 41 secondes depuis le 07

September 2019

Production si la date est après

Il reste 164 jours, 11 heures, 48 minutes et 59 secondes avant le 21 Juin 2020

Calculs similaires (mais attention au signe)

Début qui change et la préposition (avant / depuis)

18/03/2020 Technologies du Web – ELENA CABRIO 32

Page 33: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

Appel de la fonction

18/03/2020 Technologies du Web – ELENA CABRIO 33

/** différence entre maintenant et le 21/06/2020 **/

/** qui est censé être dans le futur **/

$tempsRestant = calculeDelai("2020-06-21");

/** calcul pour le temps écoulé depuis la rentrée **/

/** paragraphe affichant le résultat **/

$tempsRestant .= calculeDelai("2019-09-07");

/** calcul avec maintenant. **/

/** paragraphe affichant le résultat **/

$tempsRestant .= calculeDelai("now");

/** demonstration live : changement de date **/

Page 34: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

Fonction calculeDelai (1/2)

18/03/2020 Technologies du Web – ELENA CABRIO 34

// en paramètre : une chaine de caractère de type 2020-06-21

function calculeDelai($dateReference) {

$resultat = "";

$date = strtotime($dateReference);

$diff = $date-strtotime("now");

$debut = "Il reste"; $preposition = "avant";

if ($diff < 0) {

// c'est avant // on change le début du message et la préposition

$debut = "Il s'est passé";

$preposition = "depuis";

// on inverse le signe, pas de soucis d'arrondi

$diff = -$diff;

}

/* else { // c'est apres

// rien à faire car les valeurs initiales correspondent à ce cas } */

/* suite au transparent suivant */

Page 35: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

Fonction calculeDelai (2/2)

18/03/2020 Technologies du Web – ELENA CABRIO 35

// suite de function calculeDelai($dateReference) {

$resteS = $diff;

/** calcul du nombre de jours **/

$resteJ = floor($resteS / 86400 ); // on peut remplacer 86400 par 60*60*24

$resteS = $diff - $resteJ*86400;

/** calcul du nombre d'heures **/

$resteH = floor($resteS / (3600) ); // on peut remplacer 3600 par 60*60

$resteS = $resteS - $resteH*(3600);

/** calcul du nombre de minutes et de secondes **/

$resteM = floor($resteS / 60 );

$resteS = $resteS - $resteM*60;

/** paragraphe affichant le résultat **/

$resultat = "<p>$debut ".$resteJ." jours, $resteH heures,";

$resultat .= "$resteM minutes et ".$resteS." secondes $preposition le ";

$resultat .= date("d F Y", $date)." </p>";

return $resultat;

}

Page 36: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

une répétition dans le calcul (1/4)

Possibilité d’automatiser le traitement

Un même motif se répète : le calcul (division, arrondi, reste), y compris dans la construction du paragraphe

Regrouper les informations dans une structure pour un traitement identique

Ce qui est invariant :

Plusieurs informations : le diviseur (nombre de seconde)

Le nom (jour, heure, etc.)

Ce qui est calculé

Le calcul lui-même,

La marque du pluriel, la séparation

Objectif : pouvoir faire évoluer plus facilement

Ajouter de l’information (le nombre d’année ? )

En retirer (ne plus voir les secondes)

Etc.

18/03/2020 Technologies du Web – ELENA CABRIO 36

Page 37: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

une répétition dans le calcul (2/4)

Structuration des données

18/03/2020 Technologies du Web – ELENA CABRIO 37

$resteS = $diff;

// pb : plusieurs tableau avec les mêmes indices...// ce qui est invariant// tous les tableaux font la même taille, ici 4

$noms = array("jour", "heure", "minute", " seconde");

$nbSec = array(86400, 3600, 60, 1);

$nbInfo = count($noms);

// ce qui est variant (avec initialisation - optionnelle)

$pluriels = array( "", "", "", "");

$liaisons = array("", ",", ",", " et");

$calcul = array(0,0,0,0);// pour gérer les cas ou le calcul vaut 0

$derniere_valeur = -1;

Page 38: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

une répétition dans le calcul (3/4)

Calcul des valeurs, du pluriel (« s » ou pas « s ») et

le caractère de liaison, avec modification du précédent

18/03/2020 Technologies du Web – ELENA CABRIO 38

// calcul des valeurs

for($i = 0; $i < $nbInfo; $i=$i+1)

{

$calcul[$i] = floor($resteS / $nbSec[$i] );

$resteS = $resteS - $calcul[$i]*($nbSec[$i]);

// on determine le pluriel

if ($calcul[$i] > 1) $pluriels[$i] = "s";

// on change la liaison

if ($calcul[$i] >= 1) {

if ($derniere_valeur < 0) $liaisons[$i] = "";

else $liaisons[$i] = ",";

Page 39: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

une répétition dans le calcul (4/4)

Génération du paragraphe, cas où on est à la date dite.

18/03/2020 Technologies du Web – ELENA CABRIO 39

// si la date est maintenant ?

if ($derniere_valeur == -1) {

$resultat = "<p>C'est maintenant le ".date("d F Y", $date)." !</p>"; }

else {

// on enleve la derniere ,

if ($liaisons[$derniere_valeur] == ",") {

$liaisons[$derniere_valeur] = " et";

}

/** paragraphe affichant le résultat **/

$resultat = "<p>$debut ";

for($i = 0; $i < $nbInfo; $i=$i+1) {

if ($calcul[$i] > 0) {

$resultat .= "{$liaisons[$i]} {$calcul[$i]} {$noms[$i]}{$pluriels[$i]}";

}

}

// on termine le paragraphe

$resultat .= " $preposition le ".date("d F Y", $date)."</p>";

}

// fin de la fonction...

return $resultat;

Page 40: Technologies du Web · Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 18/03/2020 Technologies du Web – ELENA CABRIO 1. Fonctions utiles pour les

Appel de la fonction (inchangé)

18/03/2020 Technologies du Web – ELENA CABRIO 40

/** différence entre maintenant et le 21/06/2020 **/

/** qui est censé être dans le futur **/

$tempsRestant = calculeDelai("2020-06-21");

/** calcul pour le temps écoulé depuis la rentrée **/

/** paragraphe affichant le résultat **/

$tempsRestant .= calculeDelai("2019-09-09");

/** calcul avec maintenant. **/

/** paragraphe affichant le résultat **/

$tempsRestant .= calculeDelai("now");

/** demonstration : changement de date, d’année, **/

/** d’information à afficher, etc. **/