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