Langage PHP : Chapitre 1
Pr. Aissam MESRAR
Introduction
Eléments de base du langage PHP Fonctions
Tableaux Formulaires
PHP et MySQL Cookies
Sessions
Expressions régulières
Plan général du cours
Plan Plan
Introduction Introduction
Eléments de base du langage PHP Eléments de base du langage PHP
Fonctions Fonctions
Introduction
Introduction
Schéma statique du web Schéma statique du web
P1 P2 P3 Pn
Réseau Réseau Serveur
Serveur
Client Client
P2
Demande page 2
Le serveur abrite un certain nombre de pages web statiques que les clients peuvent consulter à n’importe quel moment
Le résultat de consultation d’une page sera le même chez tous les
Limites du Schéma statique du web Limites du Schéma statique du web
P1 P2 P3 Pn
Réseau Réseau Serveur
Serveur
Client Client
Peut-on réaliser un site web qui diffuse les infos instantanées avec des pages web statiques ?
Peut–on réaliser un site web qui donne les prévisions météorologique dans toutes les villes du monde ?
Schéma statique non convenable Schéma statique non convenable
Impossible de prévoir des pages statiques instantanées, Impossible de prévoir des pages statiques instantanées,
On ne sait pas à quel instant l’info sera mise à jour, c’est On ne sait pas à quel instant l’info sera mise à jour, c’est aléatoire.
aléatoire.
Difficile de prévoir des pages web pour chaque ville et à Difficile de prévoir des pages web pour chaque ville et à n’importe quelle date
n’importe quelle date
Web dynamique et interactif
Limites du Schéma statique du web
Limites du Schéma statique du web
Web dynamique et interactif Web dynamique et interactif
P1 P2 P3 Pn
Réseau Réseau Serveur
Serveur
Client Client
P2
Demande page 2
Les pages web sur le serveur sont dynamiques
Le résultat de consultation d’une page peut changer d’un moment à l’autre
pour le même client ou clients différents
La mise à jour de la page ne dépend pas des clients
Après un moment
Web dynamique et interactif Web dynamique et interactif
Moteur PHP Moteur PHP
Page web générée sur le serveur à la demande Page web générée sur le serveur à la demande
Critères du client (formulaires,…)Critères du client (formulaires,…)
Interaction avec des fichiers ou des Bases de DonnéesInteraction avec des fichiers ou des Bases de Données
Web dynamique et interactif Web dynamique et interactif
P1.html
Réseau Réseau Serveur
Serveur
Client Client
Demande p1.html
La page p1.html a été envoyée au
P2.php P3.php Pn.html
P1.html
Moteur PHP
Web dynamique et interactif Web dynamique et interactif
P1.html
Réseau Réseau Serveur
Serveur
Client Client
Demande p2.php
Moteur PHP
P2.php P3.php Pn.html
P2.html P2.html
La page p2.php est traitée (interprétée) par le Moteur PHP Le résultat de ce traitement (p2.html) est envoyé au client
Web dynamique et interactif Web dynamique et interactif
Autres moteurs Autres moteurs
CGI Common Gateway Interface CGI Common Gateway Interface
ASP Active Server Pages ASP Active Server Pages
JSP Java Server Pages JSP Java Server Pages
CFM Cold Fusion Macromédia CFM Cold Fusion Macromédia
PERL PERL
Langages compilés/Interprétés Langages compilés/Interprétés
Langages interprétés Langages interprétés
PHP, Perl, Python, JAVA, JavaScript PHP, Perl, Python, JAVA, JavaScript
Langages compilés Langages compilés
C, C++, JAVA, Pascal C, C++, JAVA, Pascal
Langages compilés/Interprétés Langages compilés/Interprétés
Langages compilés Langages compilés
Avantages Avantages
Conversion en binaire : 1e seule fois Conversion en binaire : 1e seule fois
Plus rapide Plus rapide
Inconvénients Inconvénients
Incompatibilité / plates_formes Incompatibilité / plates_formes
Langages compilés/Interprétés Langages compilés/Interprétés
Langages interprétés Langages interprétés
Avantages Avantages
Portabilité Portabilité
Inconvénients Inconvénients
Relativement lent Relativement lent
Code source divulgué Code source divulgué
Script Script : un programme écrit dans : un programme écrit dans un langage interprété
un langage interprété
Domaines d’application des langages Domaines d’application des langages
PHP, ASP, JSP,CFM : WEB PHP, ASP, JSP,CFM : WEB
C : Applications Systèmes C : Applications Systèmes
JAVA : Applications pour systèmes embarqués JAVA : Applications pour systèmes embarqués (tél portable, carte à puce)
(tél portable, carte à puce)
PERL : Administration système PERL : Administration système
C++ : Applications avec interfaces graphiques C++ : Applications avec interfaces graphiques
Performances des langages Performances des langages
Un langage est performant dans son domaine Un langage est performant dans son domaine d’application
d’application . .
Pour un même PB : Pour un même PB :
10 lignes de codes ( langage i)
10 lignes de codes ( langage i) 300 lignes (langage j) 300 lignes (langage j)
PHP :
PHP : Raisons de succès Raisons de succès
Langage interprété conçu dès son origine pour le Langage interprété conçu dès son origine pour le web web
Intégré avec l’HTML Intégré avec l’HTML
Dans le même fichier, on peut trouver du code HTML et Dans le même fichier, on peut trouver du code HTML et
PHP PHP
PHP :
PHP : Raisons de succès Raisons de succès
Performances Performances
Rapidité Rapidité
Stabilité : ne plante pasStabilité : ne plante pas
ScalabilitéScalabilité : comportement normal avec un nombre important de : comportement normal avec un nombre important de visiteurs
visiteurs
Sécurité : pas de défaillanceSécurité : pas de défaillance
Sécurité de PHP Sécurité de PHP Sécurité d’application écrite en PHP Sécurité d’application écrite en PHP
PHP :
PHP : Raisons de succès Raisons de succès
Open source Open source
Projet planétaire (meilleurs compétences)Projet planétaire (meilleurs compétences)
GratuitGratuit
Bibliothèque riche de scripts sources gratuits sur le webBibliothèque riche de scripts sources gratuits sur le web
Portabilité Portabilité
Toutes les plates-formes (matérielles et logicielles) disposent Toutes les plates-formes (matérielles et logicielles) disposent d’interpréteur PHP
d’interpréteur PHP
Serveur web : Apache, IIS, AOL server, RoxenServeur web : Apache, IIS, AOL server, Roxen
Environnement préféré : Apache/LinuxEnvironnement préféré : Apache/Linux
Apache : le plus utilisé (yahoo, google)Apache : le plus utilisé (yahoo, google)
Linux : deuxième système d’exploitation après WindowsLinux : deuxième système d’exploitation après Windows
Concurrents de PHP : ASP Concurrents de PHP : ASP
Avantages Avantages
Compatibilité avec les outils Microsoft Compatibilité avec les outils Microsoft
(IIS,Frontpage, Visuel (IIS,Frontpage, Visuel Studio, Access, SQL Server)Studio, Access, SQL Server)
Outils avec interface simple : Outils avec interface simple :
Pas besoin d’être ingénieur Pas besoin d’être ingénieur système pour administrer le serveur websystème pour administrer le serveur web
Inconvénients Inconvénients
Limité au serveur IIS Limité au serveur IIS
IIS : IIS :
Pb de sécuritéPb de sécurité
Logiciel payant, Logiciel payant,
de plus, il faut acheter tous les outils de plus, il faut acheter tous les outils accompagnantsaccompagnants
Concurrents de PHP : JSP Concurrents de PHP : JSP
Avantages Avantages
Utilise un langage totalement Orienté Objets Utilise un langage totalement Orienté Objets
Portabilité (JAVA) Portabilité (JAVA)
Meilleure sécurité Meilleure sécurité
Inconvénients Inconvénients
Relativement difficile (il faut maîtriser Java) Relativement difficile (il faut maîtriser Java)
Nécessite beaucoup de ressources (JVM ) Nécessite beaucoup de ressources (JVM )
Concurrents de
Concurrents de PHP : PHP : Cold Fusion Cold Fusion Macromédia
Macromédia
Avantages Avantages
Environnement de développement central intégrant tous les outilsEnvironnement de développement central intégrant tous les outils
Interface graphique simple : facile pour les débutantsInterface graphique simple : facile pour les débutants
Inconvénients Inconvénients
Langage lourd, mal conçu, évolue lentement Langage lourd, mal conçu, évolue lentement ne ne convient pas aux développeurs initiés
convient pas aux développeurs initiés
Hébergeurs CFM : Pas nombreux et payants Hébergeurs CFM : Pas nombreux et payants
Environnement payant Environnement payant
Concurrents de PHP : PERL Concurrents de PHP : PERL
Avantages Avantages
PERL : vieux PERL : vieux
bibliothèque d’extension très riche bibliothèque d’extension très riche
Open source : langage gratuitOpen source : langage gratuit
Inconvénients Inconvénients
Le web n’était pas l’objectif du PERL à l’origine Le web n’était pas l’objectif du PERL à l’origine
Installation sur machine cliente relativement compliquée Installation sur machine cliente relativement compliquée
PHP : Historique PHP : Historique
Créé en 1994 par Rasmus Lerdorf pour Créé en 1994 par Rasmus Lerdorf pour conserver la trace des utilisateurs venus conserver la trace des utilisateurs venus
consulter son CV consulter son CV
PHP signifie alors PHP signifie alors Personal Home Page Personal Home Page
Version 2.0 en 1995 Version 2.0 en 1995
Récupération de données soumises par Formulaire Récupération de données soumises par Formulaire
Interfaçage avec les SGBD Interfaçage avec les SGBD
Possibilité d'effectuer des calculs mathématiques Possibilité d'effectuer des calculs mathématiques
PHP : Historique PHP : Historique
1996 : 15 000 sites Web 1996 : 15 000 sites Web
1997 1997
moteur Zend : + de performances, + de bibliothèques moteur Zend : + de performances, + de bibliothèques
Zend provient des noms de ses concepteurs : AZend provient des noms de ses concepteurs : Andndi Gutmans et i Gutmans et Zeev Suraski Zeev Suraski
50 000 sites Web 50 000 sites Web
1998 1998
version 3.0 : + d'extensions, + d'interfaçage, version 3.0 : + d'extensions, + d'interfaçage,
syntaxe objet syntaxe objet PHP signifie
PHP signifie : PHP Hypertext Prepocessor : PHP Hypertext Prepocessor
PHP : Historique PHP : Historique
1999 : 100 000 sites Web 1999 : 100 000 sites Web
2000 : version 4.0, basée sur le moteur 2000 : version 4.0, basée sur le moteur Zend (+de sécurité, + de performances) Zend (+de sécurité, + de performances)
2001 : 5 100 000 sites Web 2001 : 5 100 000 sites Web
2003 : versions 4.3.4 et 5.0B2 2003 : versions 4.3.4 et 5.0B2
On estime que 20% des domaines d'Internet On estime que 20% des domaines d'Internet utilisent PHP
utilisent PHP
2005 2005 : version 5 Orienté Objet : version 5 Orienté Objet
Eléments de base de PHP
Eléments de base de PHP
Structure d’un script PHP Structure d’un script PHP
Code PHP entre les balises <?php et ?> Code PHP entre les balises <?php et ?>
Syntaxe très proche du langage C et C++ Syntaxe très proche du langage C et C++
Sensible à la casse Sensible à la casse
fait la différence entre minuscule et majusculefait la différence entre minuscule et majuscule
Chaque instruction se termine par un point virgule : Chaque instruction se termine par un point virgule : ; ;
Exemple : simple.php Exemple : simple.php
<?php
<?php
print "Mon premier essai avec PHP"
print "Mon premier essai avec PHP";;
?>
?>
Génération de page à partir d’un Génération de page à partir d’un
script script
<?php
….
……….
……..
?>
Moteur PHP
<html>
….
……….
……..
</html>
Structure d’un fichier PHP Structure d’un fichier PHP
Possibilité d’intégrer un script avec du Possibilité d’intégrer un script avec du code HTML dans le même fichier
code HTML dans le même fichier (extension .php, .php3, .phtml) (extension .php, .php3, .phtml)
Code HTML
<?php
….
……….
……..
?>
Moteur PHP
<html>
….
……….
……..
</html>
Structure d’un fichier PHP Structure d’un fichier PHP
Possibilité d’intégrer plusieurs scripts dans Possibilité d’intégrer plusieurs scripts dans le même fichier
le même fichier
Exemple : Exemple : plusieurs_scripts.php plusieurs_scripts.php
Commentaire Commentaire
Trois manières d’écrire le commentaire Trois manières d’écrire le commentaire
// Commentaire de ligne // Commentaire de ligne
#Commentaire de ligne #Commentaire de ligne
/* commentaire sur /* commentaire sur
plusieurs lignes */ plusieurs lignes */
Types de données Types de données
Types de base prédéfinis : Types de base prédéfinis :
NumériqueNumérique
Entier Entier
RéelsRéels
Chaînes de caractèresChaînes de caractères
BooléenBooléen
Défini implicitement avec des expressions numériques ou/et des Défini implicitement avec des expressions numériques ou/et des chaînes de caractères
chaînes de caractères
Types de données Types de données
Types Numériques Types Numériques
Entiers Entiers
Exemples : Exemples :
4, -6, 1024, -6, 102
Réels Réels
Exemples :Exemples :
10.25, -14.36910.25, -14.369
Opérateurs Opérateurs
Opérateurs arithmétiques : Opérateurs arithmétiques :
+,-,*,/,%
+,-,*,/,%
Opérateurs d’incrémentation/ decrémentation : Opérateurs d’incrémentation/ decrémentation :
Types de données Types de données
Chaînes de caractères Chaînes de caractères
Suite de caractères délimitée par " " ou ‘’ Suite de caractères délimitée par " " ou ‘’
Exemples : Exemples :
"bonjour" ou ‘bonjour’"bonjour" ou ‘bonjour’
Concaténation des chaînes de caractère : opérateur Concaténation des chaînes de caractère : opérateur . .
"bonjour " ."bonjour " . "ami" équivalent à "bonjour ami" "ami" équivalent à "bonjour ami"
Types de données Types de données
Type booléen Type booléen
N’est pas défini explicitementN’est pas défini explicitement
Cas particulier des types numériques et chaînes de caractèresCas particulier des types numériques et chaînes de caractères
Convention Convention
Vrai : ≠ de 0 (numérique) ou non vide (chaîne de caractère)Vrai : ≠ de 0 (numérique) ou non vide (chaîne de caractère)
Faux : =0 (numérique) ou vide (chaîne d caractère)Faux : =0 (numérique) ou vide (chaîne d caractère)
Opérateurs Opérateurs
Opérateurs de comparaisonOpérateurs de comparaison
==, !=,>,>=,<,<=
==, !=,>,>=,<,<=
Opérateurs logiquesOpérateurs logiques
&& , and, || , or, && , and, || , or,
Identifiants Identifiants
Identifiant de variables ou de constantes est Identifiant de variables ou de constantes est une suite de caractères qui :
une suite de caractères qui :
Ne contient pas d’espace Ne contient pas d’espace
Commence par une lettre ou le caractère souligné Commence par une lettre ou le caractère souligné
‘_’ ‘_’
Différent des mots clés Différent des mots clés
Exemples Exemples
Nom, n1, _prix, … Nom, n1, _prix, …
2n, prix ttc, define
2n, prix ttc, define
Constantes Constantes
Objets dont la valeur ne change pas au Objets dont la valeur ne change pas au cours de l’exécution du script
cours de l’exécution du script
Déclaration Déclaration
define("nom_constante" ,"valeur"); define("nom_constante" ,"valeur");
Exemples Exemples
define("PI",3.14); define("PI",3.14);
define("Langue","Français"); define("Langue","Français");
Variables Variables
Pas besoin de déclaration explicite Pas besoin de déclaration explicite
La variable est précédée par le caractère ‘$’ lors La variable est précédée par le caractère ‘$’ lors de l’utilisation
de l’utilisation
Exemple Exemple
$a=10; print($a);$a=10; print($a);
Variables Variables
La variable peut changer de type au cours de La variable peut changer de type au cours de l’exécution
l’exécution
Exemple: Exemple:
$a=10;
$a=10;
print ($a);
print ($a);
$a="bonjour";
$a="bonjour";
Print($a);
Print($a);
Tester l’initialisation d’une variable Tester l’initialisation d’une variable
Fonctions isset() et empty() Fonctions isset() et empty()
Expressions Expressions
Expressions numériques Expressions numériques
Exemple Exemple
$a=10;
$a=10;
$x=2.67;
$x=2.67;
$b=$a+5;
$b=$a+5;
$b++;
$b++;
$c=($a+$b)*$x;
$c=($a+$b)*$x;
Expressions Expressions
Expressions de chaînes de caractères Expressions de chaînes de caractères
Différence entre " " et ’ ’: Différence entre " " et ’ ’:
entre " " les variables seront remplacées par leurs valeursentre " " les variables seront remplacées par leurs valeurs
$b=" ami" ; $a="bonjour $b" ; $b=" ami" ; $a="bonjour $b" ;
$a sera bonjour ami
$a sera bonjour ami
Entre ’ ’ les variables dans la chaîne ne sont pas interprétées Entre ’ ’ les variables dans la chaîne ne sont pas interprétées
$b=" ami" ; $a=’bonjour $b’ ; $b=" ami" ; $a=’bonjour $b’ ;
$a sera
$a sera bonjour $bbonjour $b
Expressions Expressions
Expressions de chaînes de caractères Expressions de chaînes de caractères
Concaténation des chaînes : opérateur point ‘.’ Concaténation des chaînes : opérateur point ‘.’
ExempleExemple
$a="bonjour " ; $b=" ami " ; $a="bonjour " ; $b=" ami " ;
$c=$a.$b;$c=$a.$b;
$c sera "bonjour ami"$c sera "bonjour ami"
Tests
Test Test
Forme 1 Forme 1
Permet de choisir entre deux alternatives selon la Permet de choisir entre deux alternatives selon la valeur d’une expression logique
valeur d’une expression logique
Notation Notation
ifif(exp_log)(exp_log)
bloc1 bloc1
elseelse bloc2 bloc2
Où bloc1 et bloc2 sont des suites d’instructions Où bloc1 et bloc2 sont des suites d’instructions
Exemple : test.php Exemple : test.php
Test Test
Forme 2 Forme 2
Permet d’exécuter une seule alternative si une Permet d’exécuter une seule alternative si une condition est vérifiée. Dans ce cas la
condition est vérifiée. Dans ce cas la deuxième alternative n’existe pas.
deuxième alternative n’existe pas.
Notation Notation
if(exp_log) if(exp_log)
bloc1 bloc1
Test Test
Imbrication de if/else Imbrication de if/else
if(exp1) if(exp1)
if(exp11) if(exp11)
bloc11 bloc11
elseelse
bloc12 bloc12
else else
if(exp21) if(exp21)
bloc21 bloc21
elseelse
bloc22 bloc22
Test Test
Imbrication de if/else : 2 Imbrication de if/else : 2
èmeèmenotation notation
if(exp1) if(exp1)
if(exp11) if(exp11)
bloc11 bloc11
else else
bloc12 bloc12
elseif
elseif (exp21) (exp21)
bloc21 bloc21
else else
Choix multiple Choix multiple
Permet de choisir une alternative parmi plusieurs Permet de choisir une alternative parmi plusieurs
C’est la généralisation du test C’est la généralisation du test
Notation Notation
switch
switch(exp)(exp) {{
case val1 : bloc1;case val1 : bloc1;
case val2 : bloc2;case val2 : bloc2;
……
casecase valn : blocn; valn : blocn;
[default
[default : bloc_dfaut; : bloc_dfaut;]] }}
Un bloc Un bloc i i est exécuté si exp == val est exécuté si exp == val i i
default est optionnel default est optionnel
Exemple :switch.php
Les boucles
Les boucles
Les boucles Les boucles
Permettent de répéter l’exécution d’un ensemble Permettent de répéter l’exécution d’un ensemble d’instructions plusieurs fois
d’instructions plusieurs fois
Trois types de boucles Trois types de boucles
while while
do .. while do .. while
for for
Les boucles Les boucles
Boucle while Boucle while
Notation : Notation :
while (exp_log) while (exp_log) { {
Bloc Bloc
} }
Les boucles Les boucles
Boucle do … while Boucle do … while
Notation : Notation :
do do { { Bloc Bloc } }
while (exp_log);
while (exp_log);
Les boucles Les boucles
Boucle for Boucle for
Notation : Notation :
for(init;exp_log;int_fin) for(init;exp_log;int_fin) { {
Bloc Bloc
} }
Les boucles Les boucles
Exemple : boucle.php Exemple : boucle.php
<?php
<?php
$s=0;
$s=0;
for($i=1;$i<=100;$i++) for($i=1;$i<=100;$i++)
$s=$s+$i;
$s=$s+$i;
print("<br> la somme des entiers de 1 à 100 est: $s");
print("<br> la somme des entiers de 1 à 100 est: $s");
?>
?>
Les boucles Les boucles
Instruction break/continue Instruction break/continue
break break
Quitte la boucle immédiatementQuitte la boucle immédiatement
Avortement de la boucleAvortement de la boucle
continue continue
Arrête l’itération en cours et passe à l’itération suivanteArrête l’itération en cours et passe à l’itération suivante
Avortement de l’itération en coursAvortement de l’itération en cours
Toutes les deux doivent être protégées par une Toutes les deux doivent être protégées par une condition
condition
Fonctions
Pourquoi les fonctions ? Pourquoi les fonctions ?
Modularité Modularité
Diviser le problème à résoudre en petits Pbs et résoudre Diviser le problème à résoudre en petits Pbs et résoudre chacun d’eux par un module (facile à composer), appelé chacun d’eux par un module (facile à composer), appelé
fonction
fonction pour la plupart des langages pour la plupart des langages
Réutilisabilité Réutilisabilité
Possibilité de réutiliser certaines fonctions dans un autre Possibilité de réutiliser certaines fonctions dans un autre
problème problème
MAJ facile MAJ facile
La mise à jour d’une fonction n’affecte pas les autres La mise à jour d’une fonction n’affecte pas les autres
fonctions
fonctions
Fonctions Fonctions
Déclaration Déclaration
function nom_fonction($param1,$param2,…) function nom_fonction($param1,$param2,…) { {
Corps de la fonction Corps de la fonction } }
$Param1, $param2, … sont dits paramètres formels
$Param1, $param2, … sont dits paramètres formels de la fonction
de la fonction
Appel de la fonction Appel de la fonction
nom_fonction($eff1,$eff2,…) nom_fonction($eff1,$eff2,…)
$eff1,$eff2,… sont dits paramètres effectifs
$eff1,$eff2,… sont dits paramètres effectifs
Fonctions Fonctions
Fonction qui retourne une valeur Fonction qui retourne une valeur
L’instruction return dans le corps de la fonction permet de L’instruction return dans le corps de la fonction permet de retourner une valeur et de quitter la fonction.
retourner une valeur et de quitter la fonction.
function nom_fonction($param1,$param2,…) function nom_fonction($param1,$param2,…) {{
Corps de la fonction Corps de la fonction return($resultat);
return($resultat);
}}
$Param1, $param2, … sont dits paramètres formels de la
$Param1, $param2, … sont dits paramètres formels de la fonction
fonction
Appel de la fonction Appel de la fonction
Fonctions Fonctions
Exemple Exemple : fonction1.php : fonction1.php
fonction factorielle fonction factorielle
<?php
<?php
function fact($a) function fact($a) {{
$f=1;
$f=1;
for($i=1;$i<=$a;$i++) for($i=1;$i<=$a;$i++)
$f=$f*$i;
$f=$f*$i;
return($f);
return($f);
}}
$b=5;
$b=5;
$c=fact($b);
$c=fact($b);
print($c);
print($c);
Fonctions Fonctions
Utilisation des fonctions Utilisation des fonctions
Une fonction définie dans un script peut être Une fonction définie dans un script peut être utilisée dans les autres scripts du même
utilisée dans les autres scripts du même fichier.
fichier.
Exemple : fonction2.php Exemple : fonction2.php
Fonctions Fonctions
Modes de passage des paramètres Modes de passage des paramètres
Par valeur Par valeur
Par référence Par référence
Par référence ponctuelle Par référence ponctuelle
Fonctions Fonctions
Passage Par valeur Passage Par valeur
Mode par défaut Mode par défaut
Les paramètres effectifs gardent leur valeurs Les paramètres effectifs gardent leur valeurs après l’appel de la fonction, même si cette après l’appel de la fonction, même si cette
dernière les modifie à l’intérieur de son corps.
dernière les modifie à l’intérieur de son corps.
=>
=> la fonction travaille sur une copie des la fonction travaille sur une copie des paramètres
paramètres
Fonctions Fonctions
Exemple : fonction_pass_val.php Exemple : fonction_pass_val.php
<?php
<?php
function doubler($a) function doubler($a) {{
$a=$a*2;
$a=$a*2;
print("valeur du paramètre dans la fonction:$a<br>");
print("valeur du paramètre dans la fonction:$a<br>");
}}
$b=5;
$b=5;
print("valeur du paramètre avant l'appel:$b<br>");
print("valeur du paramètre avant l'appel:$b<br>");
doubler($b);
doubler($b);
print("valeur du paramètre après l'appel:$b<br>");
print("valeur du paramètre après l'appel:$b<br>");
Fonctions Fonctions
Passage par référence Passage par référence
Le changement d’un paramètre effectif sera Le changement d’un paramètre effectif sera perceptible de l’extérieur.
perceptible de l’extérieur.
=>
=> la fonction travaille sur le paramètre et non sur sa la fonction travaille sur le paramètre et non sur sa copie
copie
Notation : précéder le paramètre formel par & Notation : précéder le paramètre formel par &
function nom_fonction(&$param1,&$param2,…)
function nom_fonction(&$param1,&$param2,…)
Fonctions Fonctions
Exemple :fonction_passage_ref.php Exemple :fonction_passage_ref.php
<?php
<?php
function doubler(
function doubler(&$a)&$a) {{
$a=$a*2;
$a=$a*2;
print("valeur du paramètre dans la fonction:$a<br>");
print("valeur du paramètre dans la fonction:$a<br>");
}}
$b=5;
$b=5;
print("valeur du paramètre avant l'appel:$b<br>");
print("valeur du paramètre avant l'appel:$b<br>");
doubler($b);
doubler($b);
print("valeur du paramètre après l'appel:$b<br>");
print("valeur du paramètre après l'appel:$b<br>");
Fonctions Fonctions
Passage par référence ponctuel Passage par référence ponctuel
Lors de la définition de la fonction les Lors de la définition de la fonction les paramètres sont passés par valeur
paramètres sont passés par valeur
Lors de l’appel de la fonction les Lors de l’appel de la fonction les
paramètres effectifs sont précédés par &
paramètres effectifs sont précédés par &
Attention : Risque d’incohérence Attention : Risque d’incohérence
Fonctions Fonctions
Exemple : fonction_passage_ponc.php Exemple : fonction_passage_ponc.php
fonction factorielle fonction factorielle
<?php
<?php
function doubler($a) function doubler($a) {{
$a=$a*2;
$a=$a*2;
print("valeur du paramètre dans la fonction:$a<br>");
print("valeur du paramètre dans la fonction:$a<br>");
}}
$b=5;
$b=5;
print("valeur du paramètre avant l'appel:$b<br>");
print("valeur du paramètre avant l'appel:$b<br>");
doubler(
doubler(&&$b);$b);
print("valeur du paramètre après l'appel:$b<br>");
print("valeur du paramètre après l'appel:$b<br>");
Fonctions Fonctions
Paramètres par défaut Paramètres par défaut
Attribuer une valeur par défaut à un (des) Attribuer une valeur par défaut à un (des)
paramètre(s) omis lors de l’appel d’une fonction paramètre(s) omis lors de l’appel d’une fonction
Notation : affecter la valeur par défaut au Notation : affecter la valeur par défaut au paramètre formel
paramètre formel
function nom_fonction($param1,$param2 function nom_fonction($param1,$param2 = val = val ))
Le 2Le 2èmeème paramètre a une valeur par défaut paramètre a une valeur par défaut
Appel de la fonctionAppel de la fonction
nom_fonction($eff);
nom_fonction($eff);
Fonctions Fonctions
Paramètres par défaut Paramètres par défaut
Exemple : fonction_par_def1.phpExemple : fonction_par_def1.php
<?php
<?php
function conversion($init=0,$fin=180,$pas=20) function conversion($init=0,$fin=180,$pas=20) {{
for($i=$init;$i<=$fin;$i+=$pas) for($i=$init;$i<=$fin;$i+=$pas) {{
$grade = $i*200/180;
$grade = $i*200/180;
print("$i : $grade <br>");
print("$i : $grade <br>");
}} }}
conversion();
conversion();
conversion(10);
conversion(10);
conversion(20,90,10);
conversion(20,90,10);
?>
?>
Fonctions Fonctions
Paramètres par défaut : Paramètres par défaut : Attention ! Attention !
Seuls les derniers paramètres peuvent avoir des Seuls les derniers paramètres peuvent avoir des valeurs par défaut
valeurs par défaut
Exemple : fonc_par_def2.php Exemple : fonc_par_def2.php
function f_ambigue($p1function f_ambigue($p1=0=0, $p2, $p3, $p2, $p3=5=5))
Erreur lors de l’interprétationErreur lors de l’interprétation
Ambiguité lors de l’appel de la fonctionAmbiguité lors de l’appel de la fonction Comment interpréter f_ambigue(1,5) ? Comment interpréter f_ambigue(1,5) ? f_ambigue(0,1,5) ou f_ambigue(1,5,5)
Fonctions Fonctions
Nombre de paramètres indéfini Nombre de paramètres indéfini
Dans ce cas les paramètres sont extraits par deux Dans ce cas les paramètres sont extraits par deux fonctions :
fonctions :
func_num_arg()func_num_arg() : retourne le nombre de paramètres : retourne le nombre de paramètres passés à la fonction
passés à la fonction
func_get_arg ($i)func_get_arg ($i) : retourne le paramètre d’indice $i : retourne le paramètre d’indice $i dans la liste des paramètres
dans la liste des paramètres
Le premier paramètre a l’indice 0 Le premier paramètre a l’indice 0
Fonctions Fonctions
Nombre de paramètres indéfini Nombre de paramètres indéfini
Exemple : fonction_par_indef.phpExemple : fonction_par_indef.php
afficher les paramètres reçus par une fonctionafficher les paramètres reçus par une fonction
<?php
<?php
function sansparam() function sansparam() {{
$nb_par = func_num_args();
$nb_par = func_num_args();
for($i=0;$i<$nb_par;$i++) for($i=0;$i<$nb_par;$i++) {{
$param = func_get_arg($i);
$param = func_get_arg($i);
print("param $i : $param <br>");
print("param $i : $param <br>");
}} }}
sansparam("bonjour","mon","ami");
sansparam("bonjour","mon","ami");
Fonctions Fonctions
Fonctions récursivesFonctions récursives
Dans le corps d’une fonction on peut trouver un appel à elle-mêmeDans le corps d’une fonction on peut trouver un appel à elle-même
Exemple : fonction_recursive.phpExemple : fonction_recursive.php
factoriellefactorielle
<?php
<?php
function fact($a) function fact($a) {{
if ($a==1) return(1);
if ($a==1) return(1);
else return($a*fact($a-1));
else return($a*fact($a-1));
}}
$b=5;
$b=5;
$c=fact($b);
$c=fact($b);
print("$b ! = $c");
print("$b ! = $c");
Fonctions Fonctions
Variables globales Variables globales
Les paramètres locales à une fonction ne sont pas visibles Les paramètres locales à une fonction ne sont pas visibles de l’extérieur
de l’extérieur
Une variable globale peut être accédée ou modifiée à partir Une variable globale peut être accédée ou modifiée à partir de n’importe quelle fonction du même fichier
de n’importe quelle fonction du même fichier
Pour utiliser une variable globale (déclarée à l’extérieur de la Pour utiliser une variable globale (déclarée à l’extérieur de la fonction) nous devons la déclarer par la ligne suivante :
fonction) nous devons la déclarer par la ligne suivante :
global $nom_var;
global $nom_var;
Exemple : fonction_var_global.phpExemple : fonction_var_global.php