ecole esiam1 langage php : chapitre 1 pr. aissam mesrar
TRANSCRIPT
Ecole ESIAMEcole ESIAM 11
Langage PHP : Chapitre 1
Pr. Aissam MESRAR
Ecole ESIAMEcole ESIAM 22
IntroductionEléments de base du langage PHPFonctionsTableauxFormulairesPHP et MySQLCookiesSessionsExpressions régulières
Plan général du cours
Ecole ESIAMEcole ESIAM 33
PlanPlan
IntroductionIntroduction Eléments de base du langage PHPEléments de base du langage PHP FonctionsFonctions
Ecole ESIAMEcole ESIAM 44
IntroductionIntroduction
Ecole ESIAMEcole ESIAM 55
Schéma statique du webSchéma statique du web
P1
Pn
P3
P2
RéseauRéseau
ServeuServeurr ClienClien
tt
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 clients et à tout moment
Ecole ESIAMEcole ESIAM 66
Limites du Schéma statique du Limites du Schéma statique du webweb
P1
Pn
P3
P2
RéseauRéseau
ServeuServeurr ClienClien
tt
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 ?
Requête : Météo de la ville de Fès le 10 Mars 2006 à 15h
Ecole ESIAMEcole ESIAM 77
Schéma statique non convenableSché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 daten’importe quelle date
Web dynamique et interactif
Limites du Schéma statique du Limites du Schéma statique du webweb
Ecole ESIAMEcole ESIAM 88
Web dynamique et interactif Web dynamique et interactif
P1
Pn
P3
P2
RéseauRéseau
ServeuServeurr ClienClien
tt
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
Le résultat de consultation d’une page peut changer selon les critères du client (formulaire)
Après un moment
Ecole ESIAMEcole ESIAM 99
Web dynamique et interactifWeb dynamique et interactif
Moteur PHP Moteur PHP Page web générée sur le serveur à la demandePage 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
Ecole ESIAMEcole ESIAM 1010
Web dynamique et interactif Web dynamique et interactif
P1.html
RéseauRéseau
ServeuServeurr ClienClien
ttDemande p1.html
La page p1.html a été envoyée au client sans le moindre traitement
P2.php
P3.php
Pn.html
P1.html
Moteur PHP
Ecole ESIAMEcole ESIAM 1111
Web dynamique et interactif Web dynamique et interactif
P1.html
RéseauRéseau
ServeuServeurr ClienClien
ttDemande p2.phpMoteur 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
La page p2.html n’est pas stockée chez le serveur
Ecole ESIAMEcole ESIAM 1212
Web dynamique et interactifWeb dynamique et interactif
Autres moteursAutres moteurs CGI Common Gateway InterfaceCGI Common Gateway Interface ASP Active Server PagesASP Active Server Pages JSP Java Server PagesJSP Java Server Pages CFM Cold Fusion MacromédiaCFM Cold Fusion Macromédia PERLPERL
Ecole ESIAMEcole ESIAM 1313
Langages compilés/InterprétésLangages compilés/Interprétés
Langages interprétés Langages interprétés PHP, Perl, Python, JAVA, JavaScriptPHP, Perl, Python, JAVA, JavaScript
Langages compilés Langages compilés C, C++, JAVA, PascalC, C++, JAVA, Pascal
Ecole ESIAMEcole ESIAM 1414
Langages compilés/InterprétésLangages compilés/Interprétés
Langages compilés Langages compilés AvantagesAvantages
Conversion en binaire : 1e seule Conversion en binaire : 1e seule foisfois
Plus rapidePlus rapide Inconvénients Inconvénients
Incompatibilité / plates_formesIncompatibilité / plates_formes
Ecole ESIAMEcole ESIAM 1515
Langages compilés/InterprétésLangages compilés/Interprétés
Langages interprétés Langages interprétés AvantagesAvantages
Portabilité Portabilité InconvénientsInconvénients
Relativement lentRelativement lent Code source divulguéCode source divulgué
ScriptScript : un programme écrit : un programme écrit dans un langage interprétédans un langage interprété
Ecole ESIAMEcole ESIAM 1616
Domaines d’application des Domaines d’application des langageslangages
PHP, ASP, JSP,CFM : WEBPHP, ASP, JSP,CFM : WEB
C : Applications SystèmesC : Applications Systèmes
JAVA : Applications pour systèmes JAVA : Applications pour systèmes
embarqués (tél portable, carte à puce)embarqués (tél portable, carte à puce)
PERL : Administration systèmePERL : Administration système
C++ : Applications avec interfaces C++ : Applications avec interfaces
graphiquesgraphiques
Ecole ESIAMEcole ESIAM 1717
Performances des langagesPerformances des langages
Un langage est performant dans son Un langage est performant dans son
domaine d’applicationdomaine 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 300 lignes
(langage j)(langage j)
Ecole ESIAMEcole ESIAM 1818
PHP : PHP : Raisons de succèsRaisons de succès
Langage interprété conçu dès son origine Langage interprété conçu dès son origine pour le webpour le web
Intégré avec l’HTMLIntégré avec l’HTML Dans le même fichier, on peut trouver du code Dans le même fichier, on peut trouver du code
HTML et PHPHTML et PHP
Ecole ESIAMEcole ESIAM 1919
PHP : PHP : Raisons de succèsRaisons de succès
PerformancesPerformances
RapiditéRapidité
StabilitéStabilité : ne plante pas : ne plante pas
ScalabilitéScalabilité : comportement normal avec un nombre : comportement normal avec un nombre
important de visiteursimportant de visiteurs
SécuritéSécurité : pas de défaillance : 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
Ecole ESIAMEcole ESIAM 2020
PHP : PHP : Raisons de succèsRaisons 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 PHPd’interpréteur PHP Serveur web : Apache, IIS, AOL server, RoxenServeur web : Apache, IIS, AOL server, Roxen Environnement préféré : Environnement préféré : Apache/LinuxApache/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
Ecole ESIAMEcole ESIAM 2121
Concurrents de PHP : ASP Concurrents de PHP : ASP
AvantagesAvantages Compatibilité avec les outils Microsoft Compatibilité avec les outils Microsoft
(IIS,Frontpage, Visuel Studio, Access, SQL Server)(IIS,Frontpage, Visuel Studio, Access, SQL Server) Outils avec interface simple : Outils avec interface simple : Pas besoin d’être Pas besoin d’être
ingénieur système pour administrer le serveur webingénieur système pour administrer le serveur web
InconvénientsInconvénients Limité au serveur IISLimité 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
Ecole ESIAMEcole ESIAM 2222
Concurrents de PHP : JSP Concurrents de PHP : JSP
AvantagesAvantages Utilise un langage totalement Orienté ObjetsUtilise un langage totalement Orienté Objets Portabilité (JAVA)Portabilité (JAVA) Meilleure sécuritéMeilleure sécurité
InconvénientsInconvé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 )
Ecole ESIAMEcole ESIAM 2323
Concurrents de Concurrents de PHP : PHP : Cold Fusion Cold Fusion MacromédiaMacromédia
AvantagesAvantages Environnement de développement central intégrant tous Environnement de développement central intégrant tous
les outilsles outils Interface graphique simple : facile pour les débutantsInterface graphique simple : facile pour les débutants
InconvénientsInconvénients Langage lourd, mal conçu, évolue lentement Langage lourd, mal conçu, évolue lentement ne ne
convient pas aux développeurs initiésconvient pas aux développeurs initiés Hébergeurs CFM : Pas nombreux et payantsHébergeurs CFM : Pas nombreux et payants Environnement payantEnvironnement payant
Ecole ESIAMEcole ESIAM 2424
Concurrents de PHP : PERLConcurrents de PHP : PERL
AvantagesAvantages 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énientsInconvénients Le web n’était pas l’objectif du PERL à l’origineLe web n’était pas l’objectif du PERL à l’origine Installation sur machine cliente relativement Installation sur machine cliente relativement
compliquéecompliquée
Ecole ESIAMEcole ESIAM 2525
PHP : HistoriquePHP : 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 CVconsulter son CV PHP signifie alors PHP signifie alors Personal Home PagePersonal Home Page
Version 2.0 en 1995Version 2.0 en 1995 Récupération de données soumises par Récupération de données soumises par
FormulaireFormulaire Interfaçage avec les SGBDInterfaçage avec les SGBD Possibilité d'effectuer des calculs Possibilité d'effectuer des calculs
mathématiquesmathématiques
Ecole ESIAMEcole ESIAM 2626
PHP : HistoriquePHP : Historique
1996 : 15 000 sites Web1996 : 15 000 sites Web 19971997
moteur Zend : + de performances, + de moteur Zend : + de performances, + de bibliothèquesbibliothèques
Zend provient des noms de ses concepteurs : AZend provient des noms de ses concepteurs : Andndi i Gutmans et Gutmans et ZeZeev Suraski ev Suraski
50 000 sites Web50 000 sites Web 19981998
version 3.0 : + d'extensions, + d'interfaçage,version 3.0 : + d'extensions, + d'interfaçage, syntaxe objetsyntaxe objet PHP signifie PHP signifie : PHP Hypertext Prepocessor: PHP Hypertext Prepocessor
Ecole ESIAMEcole ESIAM 2727
PHP : HistoriquePHP : Historique
1999 : 100 000 sites Web1999 : 100 000 sites Web 2000 : version 4.0, basée sur le 2000 : version 4.0, basée sur le
moteur Zend (+de sécurité, + de moteur Zend (+de sécurité, + de performances)performances)
2001 : 5 100 000 sites Web2001 : 5 100 000 sites Web 2003 : versions 4.3.4 et 5.0B22003 : versions 4.3.4 et 5.0B2
On estime que 20% des domaines On estime que 20% des domaines d'Internet utilisent PHPd'Internet utilisent PHP
20052005 : version 5 Orienté Objet: version 5 Orienté Objet
Ecole ESIAMEcole ESIAM 2828
Eléments de base de PHPEléments de base de PHP
Ecole ESIAMEcole ESIAM 2929
Structure d’un script PHPStructure 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 casseSensible à 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.phpExemple : simple.php<?php<?phpprint "Mon premier essai avec PHP"print "Mon premier essai avec PHP";;?>?>print est une fonction prédéfinie qui affiche son print est une fonction prédéfinie qui affiche son
paramètreparamètre
Ecole ESIAMEcole ESIAM 3030
Génération de page à partir Génération de page à partir d’un scriptd’un script
<?php
….
……….
……..
?>
Moteur PHP
<html>
….
……….
……..
</html>
Ecole ESIAMEcole ESIAM 3131
Structure d’un fichier PHPStructure d’un fichier PHP
Possibilité d’intégrer un script avec Possibilité d’intégrer un script avec du code HTML dans le même fichier du code HTML dans le même fichier (extension .php, .php3, .phtml)(extension .php, .php3, .phtml)
Code HTML<?php….……….……..?>Code HTML
Moteur PHP
<html>
….
……….
……..
</html>
Ecole ESIAMEcole ESIAM 3232
Structure d’un fichier PHPStructure d’un fichier PHP
Possibilité d’intégrer plusieurs scripts Possibilité d’intégrer plusieurs scripts dans le même fichierdans le même fichier
Exemple : Exemple : plusieurs_scripts.phpplusieurs_scripts.php
Ecole ESIAMEcole ESIAM 3333
CommentaireCommentaire
Trois manières d’écrire le Trois manières d’écrire le
commentairecommentaire // Commentaire de ligne// Commentaire de ligne #Commentaire de ligne#Commentaire de ligne /* commentaire sur /* commentaire sur plusieurs lignes */plusieurs lignes */
Ecole ESIAMEcole ESIAM 3434
Types de donnéesTypes 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 Défini implicitement avec des expressions numériques
ou/et des chaînes de caractèresou/et des chaînes de caractères
Ecole ESIAMEcole ESIAM 3535
Types de donnéesTypes de données
Types NumériquesTypes 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 :
++,--++,--
Ecole ESIAMEcole ESIAM 3636
Types de donnéesTypes de données
Chaînes de caractèresChaî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 : Concaténation des chaînes de caractère : opérateur opérateur ..
"bonjour " "bonjour " .. "ami" équivalent à "bonjour ami" "ami" équivalent à "bonjour ami"
Ecole ESIAMEcole ESIAM 3737
Types de donnéesTypes de données
Type booléenType booléen N’est pas défini explicitementN’est pas défini explicitement Cas particulier des types numériques et chaînes de Cas particulier des types numériques et chaînes de
caractèrescaractè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érateursOpérateurs Opérateurs de comparaisonOpérateurs de comparaison
==, !=,>,>=,<,<===, !=,>,>=,<,<= Opérateurs logiquesOpérateurs logiques
&& , and, || , or, && , and, || , or,
Ecole ESIAMEcole ESIAM 3838
IdentifiantsIdentifiants
Identifiant de variables ou de constantes Identifiant de variables ou de constantes est une suite de caractères qui :est une suite de caractères qui : Ne contient pas d’espaceNe contient pas d’espace Commence par une lettre ou le caractère Commence par une lettre ou le caractère
souligné ‘_’souligné ‘_’ Différent des mots clésDifférent des mots clés
ExemplesExemples Nom, n1, _prix, …Nom, n1, _prix, … 2n, prix ttc, define2n, prix ttc, define
Ecole ESIAMEcole ESIAM 3939
ConstantesConstantes
Objets dont la valeur ne change pas Objets dont la valeur ne change pas au cours de l’exécution du scriptau cours de l’exécution du script
DéclarationDéclaration define("nom_constante" ,"valeur");define("nom_constante" ,"valeur");
ExemplesExemples define("PI",3.14);define("PI",3.14); define("Langue","Français");define("Langue","Français");
Ecole ESIAMEcole ESIAM 4040
VariablesVariables
Pas besoin de déclaration explicitePas besoin de déclaration explicite La variable est précédée par le caractère La variable est précédée par le caractère
‘$’ lors de l’utilisation‘$’ lors de l’utilisation
Exemple Exemple $a=10; print($a);$a=10; print($a);
Ecole ESIAMEcole ESIAM 4141
VariablesVariables
La variable peut changer de type au cours La variable peut changer de type au cours de l’exécutionde 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 variableTester l’initialisation d’une variable Fonctions isset() et empty()Fonctions isset() et empty()
Ecole ESIAMEcole ESIAM 4242
ExpressionsExpressions
Expressions numériquesExpressions 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;
Ecole ESIAMEcole ESIAM 4343
ExpressionsExpressions
Expressions de chaînes de caractèresExpressions de chaînes de caractères
Différence entre " " et ’ ’: Différence entre " " et ’ ’: entre " " les variables seront remplacées par leurs entre " " les variables seront remplacées par leurs
valeursvaleurs $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 Entre ’ ’ les variables dans la chaîne ne sont pas
interprétées interprétées $b=" ami" ; $a=’bonjour $b’ ; $b=" ami" ; $a=’bonjour $b’ ;
$a sera $a sera bonjour $bbonjour $b
Ecole ESIAMEcole ESIAM 4444
ExpressionsExpressions
Expressions de chaînes de caractèresExpressions 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"
Ecole ESIAMEcole ESIAM 4545
Tests
Ecole ESIAMEcole ESIAM 4646
TestTest
Forme 1Forme 1 Permet de choisir entre deux alternatives selon Permet de choisir entre deux alternatives selon
la valeur d’une expression logiquela valeur d’une expression logique NotationNotation
ifif(exp_log)(exp_log)bloc1bloc1
elseelsebloc2bloc2
Où bloc1 et bloc2 sont des suites d’instructionsOù bloc1 et bloc2 sont des suites d’instructions Exemple : test.phpExemple : test.php
Ecole ESIAMEcole ESIAM 4747
TestTest
Forme 2Forme 2 Permet d’exécuter une seule alternative Permet d’exécuter une seule alternative
si une condition est vérifiée. Dans ce cas si une condition est vérifiée. Dans ce cas la deuxième alternative n’existe pas.la deuxième alternative n’existe pas.
NotationNotationif(exp_log)if(exp_log)
bloc1bloc1
Ecole ESIAMEcole ESIAM 4848
TestTest
Imbrication de if/elseImbrication de if/elseif(exp1)if(exp1)
if(exp11)if(exp11)bloc11bloc11
elseelsebloc12bloc12
elseelseif(exp21)if(exp21)
bloc21bloc21
elseelsebloc22bloc22
Ecole ESIAMEcole ESIAM 4949
TestTest
Imbrication de if/else : 2Imbrication de if/else : 2èmeème notation notationif(exp1)if(exp1)
if(exp11)if(exp11)bloc11bloc11
elseelsebloc12bloc12
elseifelseif(exp21)(exp21)bloc21bloc21
elseelsebloc22bloc22
Ecole ESIAMEcole ESIAM 5050
Choix multipleChoix multiple Permet de choisir une alternative parmi Permet de choisir une alternative parmi
plusieursplusieurs C’est la généralisation du testC’est la généralisation du test NotationNotation
switchswitch(exp)(exp){{casecase val1 : bloc1; val1 : bloc1;casecase val2 : bloc2; val2 : bloc2;……casecase valn : blocn; valn : blocn;[default[default : bloc_dfaut; : bloc_dfaut;]]}}
Un blocUn blocii est exécuté si exp == val est exécuté si exp == vali i default est optionneldefault est optionnel Exemple :switch.phpExemple :switch.php
Ecole ESIAMEcole ESIAM 5151
Les bouclesLes boucles
Ecole ESIAMEcole ESIAM 5252
Les bouclesLes boucles
Permettent de répéter l’exécution d’un Permettent de répéter l’exécution d’un ensemble d’instructions plusieurs foisensemble d’instructions plusieurs fois
Trois types de bouclesTrois types de boucles
whilewhile
do .. whiledo .. while
forfor
Ecole ESIAMEcole ESIAM 5353
Les bouclesLes boucles
Boucle whileBoucle while Notation :Notation :
while (exp_log)while (exp_log)
{{
BlocBloc
}}
Ecole ESIAMEcole ESIAM 5454
Les bouclesLes boucles
Boucle do … whileBoucle do … while Notation :Notation :
dodo
{{
BlocBloc
} }
while (exp_log);while (exp_log);
Ecole ESIAMEcole ESIAM 5555
Les bouclesLes boucles
Boucle forBoucle for Notation :Notation :
for(init;exp_log;int_fin)for(init;exp_log;int_fin)
{{
BlocBloc
} }
Ecole ESIAMEcole ESIAM 5656
Les bouclesLes boucles
Exemple : boucle.phpExemple : 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");
?>?>
Ecole ESIAMEcole ESIAM 5757
Les bouclesLes boucles
Instruction break/continueInstruction break/continue break break
Quitte la boucle immédiatementQuitte la boucle immédiatement Avortement de la boucleAvortement de la boucle
continuecontinue Arrête l’itération en cours et passe à l’itération Arrête l’itération en cours et passe à l’itération
suivantesuivante Avortement de l’itération en coursAvortement de l’itération en cours
Toutes les deux doivent être protégées par Toutes les deux doivent être protégées par une conditionune condition
Ecole ESIAMEcole ESIAM 5858
Fonctions
Ecole ESIAMEcole ESIAM 5959
Pourquoi les fonctions ?Pourquoi les fonctions ?
ModularitéModularitéDiviser le problème à résoudre en petits Pbs et Diviser le problème à résoudre en petits Pbs et résoudre chacun d’eux par un module (facile à résoudre chacun d’eux par un module (facile à composer), appelé composer), appelé fonctionfonction pour la plupart des pour la plupart des langageslangages
RéutilisabilitéRéutilisabilitéPossibilité de réutiliser certaines fonctions dans Possibilité de réutiliser certaines fonctions dans un autre problèmeun autre problème
MAJ facileMAJ facileLa mise à jour d’une fonction n’affecte pas les La mise à jour d’une fonction n’affecte pas les autres fonctionsautres fonctions
Ecole ESIAMEcole ESIAM 6060
FonctionsFonctions DéclarationDéclaration
function nom_fonction($param1,$param2,…)function nom_fonction($param1,$param2,…){{Corps de la fonctionCorps de la fonction}}
$Param1, $param2, … sont dits paramètres $Param1, $param2, … sont dits paramètres formels de la fonctionformels de la fonction
Appel de la fonctionAppel de la fonctionnom_fonction($eff1,$eff2,…)nom_fonction($eff1,$eff2,…)
$eff1,$eff2,… sont dits paramètres effectifs$eff1,$eff2,… sont dits paramètres effectifs
Ecole ESIAMEcole ESIAM 6161
FonctionsFonctions Fonction qui retourne une valeurFonction qui retourne une valeur
L’instruction return dans le corps de la fonction L’instruction return dans le corps de la fonction permet de retourner une valeur et de quitter la permet de retourner une valeur et de quitter la fonction.fonction.
function nom_fonction($param1,$param2,…)function nom_fonction($param1,$param2,…){{Corps de la fonctionCorps de la fonctionreturn($resultat);return($resultat);}}
$Param1, $param2, … sont dits paramètres formels de $Param1, $param2, … sont dits paramètres formels de la fonctionla fonction
Appel de la fonctionAppel de la fonction$r = $r = nom_fonction($eff1,$eff2,…);nom_fonction($eff1,$eff2,…);
Ecole ESIAMEcole ESIAM 6262
FonctionsFonctions Exemple : fonction1.php: fonction1.php fonction factoriellefonction factorielle
<?php<?phpfunction 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);?>?>
Ecole ESIAMEcole ESIAM 6363
FonctionsFonctions
Utilisation des fonctionsUtilisation des fonctions Une fonction définie dans un script peut Une fonction définie dans un script peut
être utilisée dans les autres scripts du être utilisée dans les autres scripts du même fichier.même fichier.
Exemple : fonction2.phpExemple : fonction2.php
Ecole ESIAMEcole ESIAM 6464
FonctionsFonctions
Modes de passage des paramètresModes de passage des paramètres
Par valeurPar valeur
Par référencePar référence
Par référence ponctuellePar référence ponctuelle
Ecole ESIAMEcole ESIAM 6565
FonctionsFonctions
Passage Par valeurPassage Par valeur Mode par défautMode par défaut Les paramètres effectifs gardent leur Les paramètres effectifs gardent leur
valeurs après l’appel de la fonction, valeurs après l’appel de la fonction, même si cette dernière les modifie à même si cette dernière les modifie à l’intérieur de son corps.l’intérieur de son corps.
=>=> la fonction travaille sur une copie la fonction travaille sur une copie des paramètresdes paramètres
Ecole ESIAMEcole ESIAM 6666
FonctionsFonctions
Exemple : fonction_pass_val.phpExemple : fonction_pass_val.php<?php<?phpfunction doubler($a)function doubler($a){{$a=$a*2;$a=$a*2;print("valeur du paramètre dans la fonction:print("valeur du paramètre dans la fonction:
$a<br>");$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>");?>?>
Ecole ESIAMEcole ESIAM 6767
FonctionsFonctions Passage par référencePassage 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 copiecopie
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,…)…)
Ecole ESIAMEcole ESIAM 6868
FonctionsFonctions Exemple :fonction_passage_ref.phpExemple :fonction_passage_ref.php
<?php<?phpfunction 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>");?>?>
Ecole ESIAMEcole ESIAM 6969
FonctionsFonctions
Passage par référence ponctuelPassage 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 valeurparamè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 paramètres effectifs sont précédés
par &par &
Attention : Risque d’incohérenceAttention : Risque d’incohérence
Ecole ESIAMEcole ESIAM 7070
FonctionsFonctions Exemple : fonction_passage_ponc.php Exemple : fonction_passage_ponc.php fonction factoriellefonction factorielle
<?php<?phpfunction 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>");?>?>
Ecole ESIAMEcole ESIAM 7171
FonctionsFonctions
Paramètres par défautParamè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 fonctionparamè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 formelparamè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);
nom_fonction($eff1,$eff2);nom_fonction($eff1,$eff2);
Ecole ESIAMEcole ESIAM 7272
FonctionsFonctions
Paramètres par défautParamètres par défaut Exemple : fonction_par_def1.phpExemple : fonction_par_def1.php
<?php<?phpfunction 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);?>?>
Ecole ESIAMEcole ESIAM 7373
FonctionsFonctions
Paramètres par défaut : Paramètres par défaut : Attention !Attention ! Seuls les derniers paramètres peuvent avoir Seuls les derniers paramètres peuvent avoir
des valeurs par défautdes valeurs par défaut
Exemple : fonc_par_def2.phpExemple : 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)f_ambigue(0,1,5) ou f_ambigue(1,5,5)
Ecole ESIAMEcole ESIAM 7474
FonctionsFonctions
Nombre de paramètres indéfiniNombre de paramètres indéfini
Dans ce cas les paramètres sont extraits par Dans ce cas les paramètres sont extraits par deux fonctions :deux fonctions :
func_num_arg()func_num_arg() : retourne le nombre de : retourne le nombre de paramètres passés à la fonctionparamètres passés à la fonction
func_get_arg ($i)func_get_arg ($i) : retourne le paramètre d’indice : retourne le paramètre d’indice $i dans la liste des paramètres$i dans la liste des paramètres
Le premier paramètre a l’indice 0Le premier paramètre a l’indice 0
Ecole ESIAMEcole ESIAM 7575
FonctionsFonctions Nombre de paramètres indéfiniNombre 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<?phpfunction 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");?>?>
Ecole ESIAMEcole ESIAM 7676
FonctionsFonctions Fonctions récursivesFonctions récursives
Dans le corps d’une fonction on peut trouver un appel à Dans le corps d’une fonction on peut trouver un appel à elle-mêmeelle-même
Exemple : fonction_recursive.phpExemple : fonction_recursive.php factoriellefactorielle
<?php<?phpfunction 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");?>?>
Ecole ESIAMEcole ESIAM 7777
FonctionsFonctions Variables globalesVariables globales
Les paramètres locales à une fonction ne sont pas Les paramètres locales à une fonction ne sont pas
visibles de l’extérieurvisibles de l’extérieur
Une variable globale peut être accédée ou modifiée Une variable globale peut être accédée ou modifiée
à partir de n’importe quelle fonction du même fichierà partir de n’importe quelle fonction du même fichier
Pour utiliser une variable globale (déclarée à Pour utiliser une variable globale (déclarée à
l’extérieur de la fonction) nous devons la déclarer l’extérieur de la fonction) nous devons la déclarer
par la ligne suivante : par la ligne suivante :
global $nom_var;global $nom_var;
Exemple : fonction_var_global.phpExemple : fonction_var_global.php