Organiser son environnement
•Pour exécuter un programme PHP, on a besoin d’installer sur sa machine :
• Un serveur Web
• Un interpréteur PHP
• (Un serveur de base de données : pas utile pour l’instant, mais pourra servir par la
suite et souvent livré avec le serveur Web)
• Il est nécessaire d’utiliser un serveur Web et un interpréteur PHP
• Voir le cours Openclassrrom N°2 « préparer son environnement de travail » https://
openclassrooms.com/courses/concevez-votre-site-web-avec-php-et-mysql/preparer-s
on-environnement-de-travail
• Mais pour s ’exercer simplement sur des programmes simples, on peut utiliser
http://sandbox.onlinephpfunctions.com/
Les sous-programmes
• Algorithmique:
• Diviser pour régner
• Décomposer un problème en sous problème
• Mettre chaque solution à un sous problème dans un morceau de programme,
un sous-programme
• Composer les morceaux
• On distingue les fonctions ou les procédures
7.
Une fonction estun (sous-)programme
• Qui porte un nom
• A des paramètres en entrées
• Retourne une valeur
8.
Définition d’une fonctionen langage
algorithmique
Fonction nom_de_fonction (paramètre1 : type 1, …
paramètre i : type i, …) : type
Var
/* Variables locales */
Début
/*bloc d’instruction*/
Retourne variable
FinFonc
Les paramètres formels d’une fonction définissent
les types des valeurs à entrer pour calculer la valeur
retournée (Retourne ) de type type.
Les variables déclarées dans une fonction sont des
variables locales à la fonction.
Fonction somme (a : réél, b : réél) : réel
Var c : réél
Début
c a + b
Retourne c
FinFonc
a et b sont les paramètres formels de la fonction
somme.
La variable c est une variable locale à la fonction
‘’somme’’, elle n’est pas connue (vue) à l’extérieur de
cette fonction.
9.
Définition d’une fonctionen PHP
Fonction nom_de_fonction (paramètre1 : type 1, …
paramètre i : type i, …) : type
Var
/* Variables locales */
Début
/*bloc d’instruction*/
Retourne variable
FinFonc
Les paramètres formels d’une fonction définissent
les types des valeurs à entrer pour calculer la valeur
retournée (Retourne ) de type type.
Les variables déclarées dans une fonction sont des
variables locales à la fonction.
<?php
function nom_de_fonction
($parametre_1, $parametre_2, ..., $
parametre_n)
{
echo "Exemple de fonction.n";
return $return_value;
}
?>
10.
Définition d’une fonctionen PHP
Fonction somme (a : réél, b : réél) : réel
Var c : réél
Début
c a + b
Retourne c
FinFonc
a et b sont les paramètres formels de la
fonction somme.
La variable c est une variable locale à la
fonction ‘’somme’’, elle n’est pas connue
(vue) à l’extérieur de cette fonction.
<?php
définition :
function addition ($a, $b)
{
$c=$a+$b;
return $c;
}
appel :
$d = addition (2,10);
?>
11.
Utilisation d’une fonction
PROGRAMMEToto
VAR
x,y,z : réels
DEBUT
z somme(x,y)
FIN
• a et b dans la définition de la fonction
‘’somme’’ sont les paramètres formel
• x,y dans le programme Toto sont les
paramètres effectifs (ou réels)
• Les paramètres formels et effectifs peuvent
porter le même nom, mais pas nécessairement
• A l’appel de la fonction (z somme(x,y)), a
prend la valeur de x, b prend la valeur de y
• Au retour, la valeur retournée par la fonction
est affectée à la variable z
12.
Une procédure estun (sous-)programme
• Qui porte un nom
• A des paramètres en entrée (E)
• A des paramètres en sorties (S)
• A des paramètres en entrées sorties (ES)
13.
Définition d’une procédureen langage
algorithmique
Procédure nom_de_procédure (mode paramètre1 :
type 1, … , mode paramètre i : type i, …)
Var
/* Variables locales */
Début
/*bloc d’instruction*/
FinProc
mode:
Entrée, Sortie, EntréeSortie
(les paramètres en sortie et en entrée/sortie sont
déclarées dans le programme appelant)
Procédure somme (E a : réél, E b : réél, S c :
réel)
Début
c a + b
Finproc
• a, b, c dans la définition de la procédure
somme sont les paramètres formel
14.
Utilisation d’une procédure
PROGRAMMEToto
VAR
x,y,z : réels
DEBUT
somme(x,y,z)
FIN
• a, b, c dans la définition de la procédure
‘’somme’’ sont les paramètres formel
• x, y, z dans le programme Toto sont les
paramètres effectifs (ou réels)
• A l’appel de la procédure somme(x, y, z),
a prend la valeur de x, b prend la valeur
de y
• Une procédure ne retourne pas
explicitement de valeur, mais comme c
est déclaré en sortie, c est modifié.
• Une procédure ne peut pas être
affectée à une variable
15.
Mode de passagede paramètres
• Par valeur :
• La valeurs du paramètre effectif
est copiée dans le paramètre
formel
ÞLa modification du paramètre
formel n’entraîne pas la
modification du paramètres
effectif
• C’est le mode de passage des
paramètres en entrée
• Par référence :
• La référence du paramètre effectif
est copiée dans le paramètre
formel
ÞLa modification du paramètre
formel entraîne la modification de
la variable référencée par ce
paramètre
• C’est le mode de passage des
paramètres en sortie et en
entrée/sortie
16.
En règle générale
•En théorie :
• Les paramètres d’une fonction sont passés par valeur
• Les paramètres en entrée d’une procédure sont passés par valeur
• Les paramètres en sortie et en entrée/sortie sont passés par référence
• En pratique :
• En PHP, tout est possible, mais pas conseillé
17.
La visibilité desvariables
• On peut déclarer des variables dans les programmes appelant et dans
les sous-programmes appelés ! Comment cela se passe-t-il si elle ont
le même nom ?
• Par défaut, une variable définie dans un sous-programme n’est visible
que dans ce sous programme (portée locale), sauf si elle est
explicitement déclarée comme globale.
• Deux variables locales de même nom n’ont pas de lien entre elles
18.
Les variables globales
VARGLOBALES
c: réél
Procédure somme (E a: réel, E b : réel)
VAR
DEBUT
c a + b
FIN
PROGRAMME Essai
VAR
x, y : réel
DEBUT
Lire(x,y)
Somme (x,y)
Ecrire c
FIN
19.
En PHP <?php
$myPrice="100";
print ("1_Prix hors taxe : $myPrice <br/>") ;
$myPrice="100" ;
add_tva_val($myPrice);
print ("2_Après passage par valeur : $myPrice<br/>") ;
$myPrice="100" ;
add_tva_ref($myPrice);
print ("3_Après passage par référence : $myPrice<br/>");
function add_tva_val($myPrice)
{
$myPrice = .19*$myPrice + $myPrice ;
}
function add_tva_ref(&$myPrice)
{
$myPrice = .19*$myPrice + $myPrice ;
}
?>
• Function pour’’Fonction’’ et
‘’Procédure’’
• Passage par valeur par défaut :
$var
• Passage par référence : &$var
20.
En PHP
<?php
$myPrice="100" ;
print("1_Prix hors taxe : $myPrice <br/>") ;
$myPrice="100" ;
add_tva_val($myPrice);
print ("2_Après passage par valeur : $myPrice<br/>") ;
$myPrice="100" ;
add_tva_ref($myPrice);
print ("3_Après passage par référence : $myPrice<br/>");
function add_tva_val($myPrice)
{
$myPrice = .19*$myPrice + $myPrice ;
}
function add_tva_ref(&$myPrice)
{
$myPrice = .19*$myPrice + $myPrice ;
}
?>
• Function pour’’Fonction’’ et
‘’Procédure’’
• Passage par valeur par défaut : $var
• Passage par référence : &$var
Résultat de l’exécution :
1_Prix hors taxe : 100
2_Après passage par valeur :
100
3_Après passage par référence
: 119
21.
Fonctions prédéfinies enPHP
• Exemple : chaînes de caractères
• round() : arrondi les réels
• count() : nombre d’éléments dans un
tableau
• strlen(): retourne la longueur d’une
chaîne
• strpos() : cherche la position de la
première occurrence de la chaîne en
paramètre
• substr(): découpe une portion de chaîne
• isempty(): teste si une variable a une
valeur
• …
• Des centaines:
http://php.net/manual/
fr/indexes.functions.php
Les structures- Exemple
Type
StructureEtudiant
no-etudiant : chaîne
nom: chaîne
année_inscription : chaîne
adresse : chaîne
FinStruct
…
etudiant 1
etudiant 2
etudiant n
no-etudiant nom annee_inscription adresse
n enregistrements
de structure ‘’Etudiant’’
Structure des enregistrements
12 Alfred 2017 Cite Haute Malgrange
24.
Les structures –Définition
Type
Structure nom-type
champ1 : type
champ2 : type
champ3 : type
champ4 : type
FinStruct
Type
Structure Etudiant
no-etudiant : chaîne
nom: chaîne
année_inscription : chaîne
adresse : chaîne
FinStruct
25.
Les enregistrements :instances de structures
• Notion d’enregistrement
Un enregistrement est une variable
d’un type structuré de donnée.
VAR
nom-enregistrement : nom de type
Exemple:
etudiant1, etudiant2: Etudiant
26.
Les structures- Utilisation
Type
Structurenom-type
champ1 : type
champ2 : type
champ3 : type
champ4 : type
FinStruct
• Accéder à un champ d’un
enregistrement
• nom_enregistrement.nom_de_champ
• variable1 : nom-type
variable2 variable1.champ2
• etudiant1 : type_etudiant
variable4 etudiant1.nom
27.
Les enregistrements dansles structures
• Une structure peut avoir un
champ de type structure
Type
Structure nom-type-2
champ1 : type
champ2 : nom-type
champ3 : type
FinStruct
Type
Structure nom-type
champ11 : type
champ22 : type
champ33 : type
champ44 : type
FinStruct
Var exemple : nom-type-2
Variable5 exemple.champ2.champ22
28.
Un nouveau typeconstruit :
les tables (tableau d’enregistrements)
• Une table est un tableau
d’enregistrements
• VAR
var etudiants : tableau[1..10] de type-etudiant
• Nom de l’étudiant i:
Etudiants[i].nom
29.
Structures et tablesen PHP
• On ne dispose pas de type
« structure »
• On va s’appuyer sur la notion de
classe d’objets
• Avec les notations ‘’new’’
et ‘’ ->’’
• En réalité, on entrebaille la porte
de la programmation objet.
• Aussi, n’entrez pas dans le détail
de ces notations, c’est inutile et
il vous manque une partie du
contexte : exemple du mot clé
public
30.
Création des typesde structure :
<?php
class tfabricant {
public $ref;
public $nom;
public $adresse;
public $tel;
}
class tarticle {
public $ref;
public $libelle;
public $prix;
public $fab;
}
Utilisation des enregistrements structurés :
$article=new tarticle;
$article->fab=new tfabricant;
$article->ref="Art001_01";
$article->fab->ref="Fabl234";
echo $article->ref;
echo "<br />";
echo $article->fab->ref;
?>
31.
<?php
class tfabricant {
public$ref;
public $nom;
public $adresse;
public $tel;
}
class tarticle {
public $ref;
public $libelle;
public $prix;
public $fab;
}
$article[0]=new tarticle;
$article[1]=new tarticle;
$article[0]->fab=new tfabricant;
$article[1]->fab=new tfabricant;
$article[0]->ref="Art001_01";
$article[1]->ref="Art002_02";
$article[0]->fab->ref="Fabl234";
$article[1]->fab->ref="Fab4321";
echo $article[0]->ref;
echo "<br />";
echo $article[0]->fab->ref;
echo "<br />";
echo $article[1]->ref;
echo "<br />";
echo $article[1]->fab->ref;
echo "<br />";
?>
Une table d’article
32.
<?php
class tfabricant {
public$ref;
public $nom;
public $adresse;
public $tel;
}
class tarticle {
public $ref;
public $libelle;
public $prix;
public $fab;
}
for($i=0;$i<3;$i++) {
$article[$i]=new tarticle;
$article[$i]->fab=new tfabricant;
}
$article[0]->ref="Art001_01";
$article[0]->fab->ref="Fabl234";
$article[1]->ref="Art002_02";
$article[1]->fab->ref="Fab4321";
echo $article[0]->ref;
echo "<br />";
echo $article[0]->fab->ref;
echo "<br />";
echo $article[1]->ref;
echo "<br />";
echo $article[1]->fab->ref;
?>
Une table d’article
Objectif
• Assurer lapersistance des données :
• Permettre la sauvegarde et la récupération des données entre deux sessions
de travail
• Les données sont sauvegardées sur des supports particuliers : disque dur (ex
C:), clé USB …
35.
Types de fichiers
•Fichiers texte : lignes de texte successives
• Fichiers binaires : suite de ‘’0’’ et ‘’1’’ qui ne correspondent pas (sauf
accident) à du texte.
• Interprétation interne des fichiers : liée aux programmes qui les
utilisent
• Formats : HTML, JPEG, .doc, .pdf, MP3 …
Principales fonctions
• Ouvrirun fichier (en lecture, en écriture)
• Traiter un fichier : lire et écrire des lignes, des enregistrements, des
caractères …
• Fermer un fichier
38.
Forme générale d’unprogramme de
traitement d’un fichier
Programme TRAITER-FICHIER
Var
fic: fichier
nom_de_fichier : chaîne
ligne : chaîne
• ‘’fic’’ est la référence du fichier dans le
programme
• ‘’nom de fichier’’ est le nom du fichier sur disque
• EOF fonction qui teste la fin d’un fichier
(End Of File)
Début
//On récupère la référence au fichier
fic ouvrir(nom_de_fichier)
Tantque non EOF (fic) faire
//on lit la ligne en cours du fichier
//dans la variable ‘’ligne’’
lire(fic, ligne)
//traiter la ligne
traiter(ligne)
//passer à la ligne suivante
Findetantque
Fermer(fic)
Fin
39.
Exemple PHP avec‘’fgets’’
<?php
// on déclare le nom du fichier à ouvrir
$fichier = ‘fichier.txt';
//ouverture du fichier en lecture seule
$fp = fopen($fichier,'r');
//feof indiquera la fin du fichier
//le fichier est parcouru jusqu'à la fin
while(!feof($fp))
{
//lecture du fichier, stockage dans $ligne
$ligne = fgets($fp);
//affiche la ligne à l'écran, n'oubliez pas
print $ligne.'<br/>';
}
fclose($fp); //pensez à refermer à la fin du script
?>
40.
Fichiers en PHP
•Ouverture :
int fopen(string filename, string mode)
Mode:
Mode: Les associations d'ouvertures liées à fopen()
'w' ouvre le fichier pour écriture, et détruit les données si le
fichier en contient
'w+' comme ci dessus mais crée le fichier si celui ci n'éxiste pas
'a' ouvre le fichier pour ajouter de nouvelles données en fin
de fichier
'a+' comme ci-dessus mais crée le fichier si celui n'existe pas
'r' ouvre le fichier en lecture seulement
41.
Fichiers en PHP
•Lecture
string fgets(int fp, [int length])
retourne la ligne courante du fichier
Si lenght est précisé, lit lenght
caractères ou jusqu’à la fin de ligne
• Fermeture
bool close(string filename)
• Ecriture
int fwrite(int fp, string chaîne [,
int length])
écrit le contenu de chaîne dans le fichier
fp; si lenght (optionnel) est précisé, au
plus lenght octets seront écrits
Synonyme : fputs
42.
Autres fonctions
• Autres:
array file(string filename)
lit un fichier et le range dans un tableau
ligne par ligne
string fread(int fp, int length)
idem fgets mais ignore les fins de ligne
int filesize(string filename)
43.
Exemple PHP avec‘’fgets’’
<?php
// on déclare le nom du fichier à ouvrir
$fichier = ‘fichier.txt';
//ouverture du fichier en lecture seule
$fp = fopen($fichier,'r');
//feof indiquera la fin du fichier
//le fichier est parcouru jusqu'à la fin
while(!feof($fp))
{
//lecture du fichier, stockage dans $ligne
$ligne = fgets($fp);
//affiche la ligne à l'écran, n'oubliez pas
print $ligne.'<br/>';
}
fclose($fp); //pensez à refermer à la fin du script
?>
44.
Exemple ‘’file’’
<?php
$myFileArray =file(‘fichier.txt');
for ($index=0;$index<count($myFileArray);$index++)
{
print ($myFileArray[$index]."<br/>");
}
?>
45.
Les fichiers d’enregistrementsen PHP
• Délimiter les champs avec un caractère spécial
• Mettre un enregistrement par ligne
12:Alfred:2017:CiteHauteMalgrange
• Lecture : lire une ligne et récupérer les champs grâce aux
délimiteurs (voir fonction ‘’explode’’)
• Ecriture : coller les champs en insérant le délimiteur entre eux (voir
fonction ‘’implode’’)
46.
Sujet de TP(2017 – 2018)
Tri d’un fichier de données selon un champ de la structure des enregistrements.
On désire réaliser un programme qui prend en entrée une liste d’étudiants initialement non triée et qui retourne la même
liste d’étudiants mais triée par numéro d’étudiant croissant.
La liste d’étudiants est stockée dans un fichier texte dont chaque enregistrement contient un étudiant avec la structure
suivante : no-étudiant, nom, prénom et inscription. Le fichier tient entièrement en mémoire.
On propose d’organiser l’étude en trois temps de la façon suivante :
- Ecrire un programme en PHP qui trie un tableau d’entiers en mémoire
- Adapter le programme pour trier des entiers stockés dans un fichier
- Adapter le programme pour trier des étudiants (structures composées des champs no-étudiant, nom, prénom et
inscription) stockés dans un fichier.
- A Chaque étape, donner :
- L’algorithme utilisé en langage algorithmique
- Le programme correspondant
(On pourra utiliser les fonctions implode et explode pour gérer les structures.)
Une fois le programme trié, on veut :
- pouvoir insérer dans le fichier un nouvel étudiant
- pouvoir supprimer un étudiant de numéro donné
Algorithmique sur lestableaux
• Fortement liée à la notion de boucle
• Recherche d’un élément
• Plus petit/ plus grand élément
• Moyenne
• Tris
• …
51.
Recherche d’un élément
PROGRAMMERecherche
VAR
nombres : tableau [1..10]
d’entiers
valeur_cherchée : entier
trouve: booléen
DEBUT
i 1
trouve faux
Tant que i<=10 et trouve = faux Faire
Si nombre[i] = valeur_cherchée Alors trouve vrai
Fsi
i i + 1
FinTantQue
Si Trouve alors Afficher « Trouvé en position » i -1
sinon Afficher « Pas trouvé »
FinSi
FIN
52.
Recherche d’un élémenten PHP
<?php
$nombres = array(3,7,59,45,12,999, 45,5,88,1);
$trouve=false;
$valeur-recherchee=5;
$i = 0;
while(($i<9) && (! $trouve)
{
If ($nombres[$i] == $valeur-recherchee) trouve = true;
$i = $i + 1;
}
If ($trouve) echo ‘’trouvé en position’’.($i-1). ’’n ’’;
?>
La récursivité
• Unefonction (procédure) récursive est une fonction (procédure) qui
s’appelle elle-même, directement ou par l’intermédiaire d’une autre
fonction ou procédure.
• Un problème difficile de la programmation récursive est de trouver
la(les) bonne(s) condition(s) d’arrêt.
56.
La récursivité
• Simple
Procedurerecursive ()
DEBUT
…
recursive ()
…
FIN
• Croisée
Procedure recursive1 ()
DEBUT
…
Recursive2 ()
…
FIN
Procedure recursive2 ()
DEBUT
…
recursive1 ()
…
FIN
Exemple : calculd’une factorielle
• Version 1 :
Fonction factorielle (n: entier) : entier
DEBUT
fact n*factorielle(n-1)
Retourne fact
FIN
Oui, mais quand est-ce que l’on s’arrête ?
59.
Factorielle
• Version 2
Fonctionfactorielle (n: entier) : entier
DEBUT
Si n > 1
alors retourne n*factorielle(n-1)
Sinon
retourne n
Fsi
FIN
• Oui mais, et factorielle 0 ?
60.
Factorielle
• Version 3
Fonctionfactorielle (n: entier) : entier
DEBUT
Si n = 0
Alors retourne 1
Sinon
retourne n*fact(n-1)
Fsi
FIN
61.
La récursivité
• Unefonction (procédure) récursive est une fonction (procédure) qui
s’appelle elle-même, directement ou par l’intermédiaire d’une autre
fonction ou procédure.
• Un problème difficile de la programmation récursive est de trouver
la(les) bonne(s) condition(s) d’arrêt.
62.
La récursivité
• Simple
Procedurerecursive ()
DEBUT
…
recursive ()
…
FIN
• Croisée
Procedure recursive1 ()
DEBUT
…
Recursive2 ()
…
FIN
Procedure recursive2 ()
DEBUT
…
recursive1 ()
…
FIN
Exemple : calculd’une factorielle
• Version 1 :
Fonction factorielle (n: entier) : entier
DEBUT
fact n*factorielle(n-1)
Retourne fact
FIN
Oui, mais quand est-ce que l’on s’arrête ?
65.
Factorielle
• Version 2
Fonctionfactorielle (n: entier) : entier
DEBUT
Si n > 1
alors retourne n*factorielle(n-1)
Sinon
retourne n
Fsi
FIN
• Oui mais, et factorielle 0 ?
66.
Factorielle
• Version 3
Fonctionfactorielle (n: entier) : entier
DEBUT
Si n = 0
Alors retourne 1
Sinon
retourne n*fact(n-1)
Fsi
FIN