Et également retour sur le TP2. Prog Web Server - 2015-2016



Documents pareils
Introduction à MATLAB R

Mysql avec EasyPhp. 1 er mars 2006

Dans l'article précédent, vous avez appris

Algorithmique et Programmation, IMA

L envoi d un formulaire par courriel. Configuration requise Mail Texte Mail HTML Check-list

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Corrigés des premiers exercices sur les classes

Premiers Pas en Programmation Objet : les Classes et les Objets

AWS avancé. Surveiller votre utilisation d EC2

Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Administration de Parc Informatique TP03 : Résolution de noms

PHP 4 PARTIE : BASE DE DONNEES

Perl Orienté Objet BioPerl There is more than one way to do it

Cours 1: Java et les objets

Impact des robots d indexation sur le cache de second niveau de SPIP IMBERTI Christophe - SG/SPSSI/CP2I/DO Ouest 06/06/2012 mis à jour le 05/07/2012

CARPE. Documentation Informatique S E T R A. Version Août CARPE (Documentation Informatique) 1

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

STAGE IREM 0- Premiers pas en Python

Cours d initiation à la programmation en C++ Johann Cuenin

1 Recherche en table par balayage

Environnements informatiques

TP 1. Prise en main du langage Python

TP JAVASCRIPT OMI4 TP5 SRC

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Initiation à l algorithmique

Chapitre 5 : Les procédures stockées PL/SQL

Module http MMS AllMySMS.com Manuel d intégration

I. Introduction aux fonctions : les fonctions standards

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

//////////////////////////////////////////////////////////////////// Administration bases de données

Logiciel : GLPI Version : SYNCRHONISATION DE GLPI AVEC ACTIVE DIRECTORY. Auteur : Claude SANTERO Config. : Windows 2003.

PHP. PHP et bases de données

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Manipulation 4 : Application de «Change».

Rapport de certification

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Exonet : sauvegarde automatisée d une base de données

4. Groupement d objets

INF111. Initiation à la programmation impérative en C amini/cours/l1/inf111/ Massih-Reza Amini

25 mars. Tutoriel sur Laravel. Préparé par : Lydiane Beaulne-Bélisle. Ceci est un tutorial qui montre comment débuter avec le Framework PHP Laravel.

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Programmer en JAVA. par Tama

Initiation à la programmation OEF pour Wims (exercices).

Corrigé des TD 1 à 5

Cryptographie. Cours 3/8 - Chiffrement asymétrique

Les processus légers : threads. Système L3, /31

Java Licence Professionnelle CISII,

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Utilisation d objets : String et ArrayList

E-TRANSACTIONS. Guide du programmeur API Plug-in. Version 1.1

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

2 Formation utilisateur

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

Bases de programmation. Cours 5. Structurer les données

Claude Delannoy. 3 e édition C++

Introduction au langage C

Programmation Web. Madalina Croitoru IUT Montpellier

Le langage C. Séance n 4

Table des matières Avant-propos... V Scripting Windows, pour quoi faire?... 1 Dans quel contexte?

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Décisionnel. SI Virtualisé. Performant. Cloud. SAP BusinessObjects. Dashboards. Expertise. Succès. Service Reporting. Finance. SaaS. Web 2.0.

PHP 5.4 Développez un site web dynamique et interactif

IPS-Firewalls NETASQ SPNEGO

Licence Sciences et Technologies Examen janvier 2010

Plan du cours Cours théoriques. 29 septembre 2014

Environnements de développement (intégrés)

1 Description générale de VISFIELD

SYSTÈME DE GESTION DE FICHIERS

Aide - mémoire gnuplot 4.0

TP 4 de familiarisation avec Unix

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Algorithmique, Structures de données et langage C

Python - introduction à la programmation et calcul scientifique

Formation : WEbMaster

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Cours Langage C/C++ Programmation modulaire

WEB & DÉVELOPPEMENT LES BASES DU WEB LE LANGAGE HTML FEUILLES DE STYLES CSS HISTORIQUE D INTERNET ET DU WEB LES DIFFÉRENTS LANGAGES

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

1 Position du problème

SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Introduction à la Programmation Parallèle: MPI

SYSTÈMES D INFORMATIONS

Quatrième partie IV. Test. Test 15 février / 71

Encryptions, compression et partitionnement des données

Drupal Développeur. Theming et développement pour Drupal. Une formation Formateur : Fabien Crépin. Drupal Développeur.

La programmation orientée objet Gestion de Connexions HTTP Manipulation de fichiers Transmission des données PHP/MySQL. Le langage PHP (2)

CONCOURS DE L AGRÉGATION INTERNE «ÉCONOMIE ET GESTION» SESSION 2015 SECONDE ÉPREUVE

Comment créer son propre monitoring. (Version simple PHP)

RMI le langage Java XII-1 JMF

Analyse de sécurité de logiciels système par typage statique

Transcription:

Et également retour sur le TP2

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 */ Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 02 / 37

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) */ Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 03 / 37

$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") */ Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 04 / 37

Exécute une itération à chaque passage de la boucle Itération sur les indices Ou pour «n» itérations Il faut préciser: l initialisation du compteur d itération On peut commencer à 0; à 2; etc.. Attention à la plage des indices d un tableau la condition d arrêt de la boucle; Limite supérieur si le compteur augmente Limite inférieur si le compteur diminue la ou les instructions faisant évoluer ces valeurs à chaque itération $longeur=count($tab); for ($a=0,$a<$longueur; $a = $a+1) { echo $tab[$a] ; Boucles équivalentes for ($x=0; $x <10; $x++) { // Ici des instructions foreach($tab as $case) { echo $case; Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 05 / 37

// 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 2re lignes */ $contenu_article.= $lecture_fichier[$cpt]; Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 06 / 37

Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 07 / 37

Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 08 / 37

Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 09 / 37

Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 10 / 37

Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 11 / 37

$precedent initialisé à "" Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 12 / 37

Comment écrire nos propres fonctions en php. Premier pas vers une architecture logicielle. Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 13 / 37

Exemple de code répété dans le tp02 $nomarticle = explode("/",$fichiers[$indice]); $nomarticle = $nomarticle[count($nomarticle)- 1]; Besoin de mettre en commun Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 14 / 37

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 Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 15 / 37

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) Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 16 / 37

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"); Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 17 / 37

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») Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 18 / 37

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(); Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 19 / 37

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. Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 20 / 37

TP01 : calcul depuis la rentrée et jusqu à l été Deux parties de code très ressemblante Démarche : Identification du code commun (conception) Factorisation Amélioration (partagée) Partage entre fichier Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 21 / 37

En principes pour les jours, les heures, les minutes et les secondes Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 22 / 37

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 Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 23 / 37

function calculedelai($datereference) { $resultat = ""; $date = strtotime($datereference); $diff = $date-strtotime("now"); if ($diff < 0) { // c'est avant else { // c'est apres return $resultat; Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 24 / 37

Production si la date est avant Il s'est passé 20 jours, 11 heures, 1 minute et 41 secondes depuis le 07 September 2015 Production si la date est après Il reste 164 jours, 11 heures, 48 minutes et 59 secondes avant le 21 June 2016 Calculs similaires (mais attention au signe) Début qui change et la préposition (avant / depuis) Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 25 / 37

/** différence entre maintenant et le 21/06/2016 **/ /** qui est censé être dans le futur **/ $tempsrestant = calculedelai("2016-06-21"); /** calcul pour le temps écoulé depuis la rentrée **/ /** paragraphe affichant le résultat **/ $tempsrestant.= calculedelai("2015-09-07"); /** calcul avec maintenant. **/ /** paragraphe affichant le résultat **/ $tempsrestant.= calculedelai("now"); /** demonstration live : changement de date **/ Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 26 / 37

// en paramètre : une chaine de caractère de type 2016-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 */ Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 27 / 37

// 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; Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 28 / 37

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. Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 29 / 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; Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 30 / 37

// 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] = ","; $derniere_valeur = $i; Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 31 / 37

// si la date est maintenant? if ($derniere_valeur == -1) { else { $resultat = "<p>c'est maintenant le ".date("d F Y", $date)."!</p>"; // 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; Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 32 / 37

Appel à calculedelai("2019-06- 21"); 3 points d arrêt : - Test avant/après - Dans la boucle (plusieurs fois) - En sortie de boucle Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 33 / 37

Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 34 / 37

Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 35 / 37

Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 36 / 37

/** différence entre maintenant et le 21/06/2013 **/ /** qui est censé être dans le futur **/ $tempsrestant = calculedelai("2014-06-21"); /** calcul pour le temps écoulé depuis la rentrée **/ /** paragraphe affichant le résultat **/ $tempsrestant.= calculedelai("2013-09-09"); /** calcul avec maintenant. **/ /** paragraphe affichant le résultat **/ $tempsrestant.= calculedelai("now"); /** demonstration : changement de date, d année, **/ /** d information à afficher, etc. **/ Philippe Renevier Gonin - boucle foreach/for et fonctions - Prog Web Serveur 37 / 37