IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Introduction à PHP 5 par l'exemple


précédentsommairesuivant

IV. Les bases de PHP

IV-A. Un premier exemple

Ci-dessous, on trouvera un programme présentant les premières caractéristiques de PHP.

IV-A-1. Le programme (exemple_01)

 
Cacher/Afficher le codeSélectionnez

Les résultats :

 
Cacher/Afficher le codeSélectionnez

Commentaires

  • ligne 5 : en PHP, on ne déclare pas le type ds variables. Celles-ci ont un type dynamique qui peut varier au cours du temps
  • $nom représente la variable d'identifiant nom
  • ligne 8 : pour écrire à l'écran, on peut utiliser l'instruction print ou l'instruction echo
  • ligne 11 : le mot clé array permet de définir un tableau. La variable $nom[$i] représente l'élément $i du tableau $tableau.
  • ligne 14 : la fonction count($tableau) rend le nombre d'éléments du tableau $tableau
  • ligne 18 : les chaînes de caractères sont entourées de guillemets " ou d'apostrophes '. A l'intérieur de guillemets, les variables $variable sont évaluées mais pas à l'intérieur d'apostrophes.
  • ligne 21 : la fonction list permet de rassembler des variables dans une liste et de leur attribuer une valeur avec une unique opération d'affectation. Ici $chaine1="chaine1" et $chaine2="chaine2".
  • ligne 24 : l'opérateur . est l'opérateur de concaténation de chaînes.
  • ligne 88 : le mot clé function définit une fonction. Une fonction rend ou non des valeurs par l'instruction return. Le code appelant peut ignorer ou récupérer les résultats d'une fonction. Une fonction peut être définie n'importe où dans le code.
  • ligne 90 : la fonction prédéfinie getType($variable) rend une chaîne de caractères représentant le type de $variable. Ce type peut changer au cours du temps.
  • ligne 79 : la fonction prédéfinie exit arrête le script.

IV-B. La portée des variables

IV-B-1. Programme 1 (exemple_02)

 
Cacher/Afficher le codeSélectionnez

Les résultats :

 
Cacher/Afficher le codeSélectionnez

Commentaires

  • lignes 29-30 : définissent 2 variables $i et $j du programme principal. Ces variables ne sont pas connues à l'intérieur des fonctions. Ainsi, ligne 9, la variable $j de la fonction f1 est une variable locale à la fonction f1 et est différente de la variable $j du programme principal. Une fonction peut accéder à une variable $variable du programme principal via un tableau de variables globales appelé $GLOBALS. Ligne 7, la notation $GLOBALS["i"] désigne la variable globale $i du programme principal. Si nous écrivons

$i=$GLOBALS["i"]

une variable $i locale se voit affecter la valeur de la variable $i globale. On a là deux variables différentes et modifier la variable locale $i ne modifiera pas la variable globale $i. La notation

$i=&Globals["i"]

fait que la variable locale $i a la même adresse mémoire que la variable globale $i. Manipuler la variable locale $i revient alors à manipuler la variable globale $i.

IV-B-2. Programme 2 (exemple_03)

 
Cacher/Afficher le codeSélectionnez

Les résultats :

 
Cacher/Afficher le codeSélectionnez

Commentaires

Dans certains langages, une variable définie à l'intérieur d'accolades a la portée de celles-ci : elle n'est pas connue à l'extérieur de celles-ci. Les résultats ci-dessus montrent qu'il n'en est rien en PHP. La variable $i définie ligne 5 à l'intérieur des accolades est la même que celle utilisée lignes 4 et 8 à l'extérieur de celles-ci.

IV-C. Les tableaux

IV-C-1. Tableaux classiques à une dimension (exemple_04)

 
Cacher/Afficher le codeSélectionnez

Les résultats :

 
Cacher/Afficher le codeSélectionnez

Commentaires

Le programme ci-dessus montre des opérations de manipulation d'un tableau de valeurs. Il existe deux notations pour les tableaux en PHP :

 
Cacher/Afficher le codeSélectionnez

Le tableau 1 est appelé tableau et le tableau 2 un dictionnaire où les éléments sont notés clé => valeur. La notation $contraires["beau"] désigne la valeur associée à la clé "beau". C'est donc ici la chaîne "laid". Le tableau 1 n'est qu'une variante du dictionnaire et pourrait être noté :

 
Cacher/Afficher le codeSélectionnez

On a ainsi $tableau[2]="trois". Au final, il n'y a que des dictionnaires. Dans le cas d'un tableau classique de n éléments, les clés sont les nombres entiers de l'intervalle [0,n-1].

  • ligne 15 : la fonction each($tableau) permet de parcourir un dictionnaire. A chaque appel, elle rend une paire (clé,valeur) de celui-ci.
  • ligne 14 : la fonction reset($dictionnaire) positionne la fonction each sur la première paire (clé,valeur) du dictionnaire.
  • ligne 15 : la boucle while s'arrête lorsque la fonction each rend une paire vide à la fin du dictionnaire.
  • ligne 19 : la notation $tableau[]=valeur ajoute l'élément valeur comme dernier élément de $tableau.
  • ligne 25 : le tableau est parcouru avec un foreach. Cet élément syntaxique permet de parcourir un dictionnaire, donc un tableau, selon deux syntaxes :
 
Cacher/Afficher le codeSélectionnez

La première syntaxe ramène une paire (clé,valeur) à chaque itération alors que la seconde syntaxe ne ramène que l'élément valeur du dictionnaire.

  • ligne 31 : la fonction array_pop($tableau) supprime le dernier élément de $tableau
  • ligne 39 : la fonction array_shift($tableau) supprime le premier élément de $tableau
  • ligne 47 : la fonction array_push($tableau,valeur) ajoute valeur comme dernier élément de $tableau
  • ligne 39 : la fonction array_unshift($tableau,valeur) ajoute valeur comme premier élément de $tableau

IV-C-2. Le dictionnaire (exemple_05)

 
Cacher/Afficher le codeSélectionnez

Les résultats :

 
Cacher/Afficher le codeSélectionnez

Commentaires

Le code précédent applique à un dictionnaire ce qui a été vu auparavant pour un simple tableau. Nous ne commentons que les nouveautés :

  • ligne 13 : la fonction ksort (key sort) permet de trier un dictionnaire dans l'ordre naturel de la clé.
  • ligne 21 : la fonction array_keys($dictionnaire) rend la liste des clés du dictionnaire sous forme de tableau
  • ligne 26 : la fonction array_values($dictionnaire) rend la liste des valeurs du dictionnaire sous forme de tableau
  • ligne 47 : la fonction isset($variable) rend true si la variable $variable a été définie, false sinon.
  • ligne 36 : la fonction unset($variable) supprime la variable $variable.

IV-C-3. Les tableaux à plusieurs dimensions (exemple_06)

 
Cacher/Afficher le codeSélectionnez

Résultats :

 
Cacher/Afficher le codeSélectionnez

Commentaires

  • ligne 5 : les éléments du tableau $multi sont eux-mêmes des tableaux
  • ligne 12 : le tableau $multi devient un dictionnaire (clé,valeur) où chaque valeur est un tableau

IV-C-4. Liens entre chaînes et tableaux (exemple_07)

 
Cacher/Afficher le codeSélectionnez

Résultats :

 
Cacher/Afficher le codeSélectionnez

Commentaires

  • ligne 5 : la fonction explode($séparateur,$chaine) permet de récupérer les champs de $chaine séparés par $séparateur. Ainsi explode(":",$chaine) permet de récupérer sous forme de tableau les éléments de $chaine qui sont séparés par la chaîne ":".
  • la foncion implode($séparateur,$tableau) fait l'opération inverse de la fonction explode. Elle rend une chaîne de caractères formée des éléments de $tableau séparés par $séparateur.

IV-D. Les chaînes de caractères

IV-D-1. Notation (exemple_08)

 
Cacher/Afficher le codeSélectionnez

Résultats :

 
Cacher/Afficher le codeSélectionnez

IV-D-2. Comparaison (exemple_09)

 
Cacher/Afficher le codeSélectionnez

Résultats :

IV-E. Les expressions régulières (exemple_10)

 
Cacher/Afficher le codeSélectionnez

Résultats :

 
Cacher/Afficher le codeSélectionnez

Commentaires

  • lignes 3-4 : nous utilisons ici les expression régulières pour récupérer les divers champs d'une chaîne de caractères. Les expressions régulières permetent de dépasser les limites de la fonction implode. Le principe est de comparer une chaîne de caractères à une autre chaîne appelée modèle à l'aide de la fonction preg_match :
 
Cacher/Afficher le codeSélectionnez

La fonction preg_match rend un booléen si le modèle peut être trouvé dans la chaîne . Si oui, $ champs[0] représente la sous-chaîne correspondant au modèle. Par ailleurs, si modèle contient des sous-modèles entre parenthèses, $ champs[1] est le morceau de $ chaîne correspondant au 1 er sous-modèle, $ champs[2] est le morceau de $ chaîne correspondant au 2 ième sous-modèle, etc…

Considérons le 1 er exemple. Le modèle est défini ligne 8 : il désigne une suite de un ou plusieurs (+) chiffres (\d) placés n'importe où dans une chaîne. Par ailleurs, le modèle définit un sous-modèle entouré de parenthèses.

  • ligne 10 : le modèle /(\d+)/ (suite d'un ou plusieurs chiffres n'importe où dans la chaîne) est comparé à la chaîne "xyz1234abcd". On voit que la sous-chaîne 1234 correspond au modèle. On aura donc $champs[0] égal à "1234". Par ailleurs, le modèle a des sous-modèles entre parenthèses. On aura $champs[1]="1234".
  • ligne 11 : le modèle /(\d+)/ est comparé à la chaîne "12 34". On voit que les sous-chaînes 12 et 34 correspondent au modèle. La comparaison s'arrête à la première sous-chaîne correspondant au modèle. On aura donc, $champs[0]=12 et $champs[1]=12.
  • ligne 12 : le modèle /(\d+)/ est comparé à la chaîne "abcd". Aucune correspondance n'est trouvée.

Explicitons les modèles utilisés dans la suite du code :

 
Cacher/Afficher le codeSélectionnez

début de chaîne (^), puis 0 ou plusieurs (*) caractères quelconques (.) puis 1 ou plusieurs (+) chiffres, puis de nouveau 0 ou plusieurs (*) caractères quelconques (.). Le modèle (.*) désigne 0 ou plusieurs caractères quelconques. Un tel modèle va correspondre à n'importe quelle chaîne. Ainsi le modèle /^(.*)(\d+)(.*)$/ ne sera-t-il jamais trouvé car le premier sous-modèle (.*) va absorber toute la chaîner. Le modèle (.*?)(\d+) désigne lui 0 ou plusieurs caractères quelconques jusqu'au sous-modèle suivant (?) , ici \d+. Donc les chiffres ne sont maintenant plus absorbés par le modèle (.*). Le modèle ci-dessus correspond donc à [début de chaîne (^), une suite de caractères quelconques (.*?), une suite d'un ou plusieurs chiffres (\d+), une suite de caractères quelconques (.*?), la fin de la chaîne ($)].

 
Cacher/Afficher le codeSélectionnez

correspond à [début de chaîne (^), 2 chiffres (\d\d), le caractère / (\/), 2 chiffres, /, 2 chiffres, une suite de 0 ou plusieurs espaces (\s*), la fin de chaîne ($)]

 
Cacher/Afficher le codeSélectionnez

[début de chaîne (^), 0 ou plusieurs espaces (\s*), un signe + ou - [+|-] présent 0 ou 1 fois (?), une suite de 0 ou plusieurs espaces (\s*), 1 ou plusieurs chiffres suivis d'un point décimal suivi de zéro ou plusieurs chiffres (\d+\.\d*) ou (|) un point décimal (\.) suivi d'un ou plusieurs chiffres (\d+) ou (|) un ou plusieurs chiffres (\d+), une suite de 0 ou plusieurs espaces (\s*)].

IV-F. Mode de passage des paramètres des fonctions (exemple_11)

 
Cacher/Afficher le codeSélectionnez

Résultats :

 
Cacher/Afficher le codeSélectionnez

Commentaires

Le code ci-dessus montre les deux modes de passage de paramètres à une fonction. Prenons l'exemple suivant :

 
Cacher/Afficher le codeSélectionnez
  • ligne 1 : définit les paramètres formels $a et $b de la fonction f. Celle-ci manipule ces deux paramètres formels et rend un résultat.
  • ligne 7 : appel de la fonction f avec deux paramètres effectifs $i et $j. Les liens entre les paramètres formels ($a,$b) et les paramètres effectifs ($i,$j) sont définis par la ligne 7
  • &$a : le signe & indique que le paramètre formel $a prendra pour valeur l'adresse du paramètre effectif $i. Dit autrement, $a et $i sont deux références sur un même emplacement mémoire. Manipuler le paramètre formel $a revient à manipuler le paramètre effectif $i. C'est ce que montre l'exécution du code. Ce mode de passage convient aux paramètres de sortie et aux données volumineuses telles que les tableaux et dictionnaires. On appelle ce mode passage, passage par référence.
  • $b : le paramètre formel $b prendra pour valeur celle du paramètre effectif $j. C'est un passage par valeur. Les paramètres formels et effectifs sont deux variables différentes. Manipuler le paramètre formel $b n'a aucune incidence sur le paramètre effectif $j. C'est ce que montre l'exécution du code. Ce mode de passage convient aux paramètres d'entrée.
  • Soit la fonction échange qui admet deux paramètres formels $a et $b. La fonction échange la valeur de ces deux paramètres. Ainsi lors d'un appel échange ($i,$j), le code appelant s'attend à ce que les valeurs des deux paramètres effectifs soient échangés. Ce sont donc des paramètres de sortie (ils sont modifiés). On écrira donc :
 
Cacher/Afficher le codeSélectionnez

IV-G. Résultats rendus par une fonction (exemple_12)

 
Cacher/Afficher le codeSélectionnez

Résultats

 
Cacher/Afficher le codeSélectionnez

Commentaires

  • le programme précédent montre qu'une fonction php peut rendre un ensemble de résultats et non un seul, sous la forme d'un tableau ou d'un objet. La notion d'objet est explicitée un peu plus loin
  • lignes 19-22 : la fonction f1 rend plusieurs valeurs sous la forme d'un tableau
  • lignes 25-33 : la fonction f2 rend plusieurs valeurs sous la forme d'un objet

IV-H. Les fichiers texte (exemple_13)

 
Cacher/Afficher le codeSélectionnez

Le fichier infos.txt :

 
Cacher/Afficher le codeSélectionnez

Les résultats :

 
Cacher/Afficher le codeSélectionnez

Commentaires

  • ligne 11 : fopen(nom_fichier,"w") ouvre le fichier nom_fichier en écriture (w=write). Si le fichier n'existe pas, il est créé. S'il existe, il est vidé. Si la création échoue, fopen rend une valeur false. Dans l'instruction if (!$fic = fopen($INFOS, "w")) {…}, il y a deux opérations successives : 1) $fic=fopen(..) 2) if( ! $fic) {…}
  • ligne 18 : fputs($fic,$chaîne) écrit chaîne dans le fichier $fic.
  • ligne 20 : fclose($fic) ferme le fichier $fic.
  • ligne 25 : fopen(nom_fichier,"r") ouvre le fichier nom_fichier en lecture (r=read). Si l'ouverture échoue (le fichier n'existe pas), fopen rend une valeur false.
  • ligne 29 : fgets($fic,1000) lit la ligne suivante du fichier dans la limite de 1000 caractères. Dans l'opération while ($ligne = fgets($fic, 1000)) {…}, il y a deux opérations successives 1) $ligne=fgets(…) 2) while ( ! $ligne). Après que le dernier caractère du fichier a été lu, la fonction fgets rend la chaîne vide et la boucle while s'arrête.
  • ligne 31 : la fonction fgets lit une ligne de texte, caractère de fin de ligne inclus. La fonction cutNewLineChar ds lignes 70-79 élimine l'éventuel caractère de fin de ligne.
  • ligne 72 : la fonction strlen($chaîne) rend le nombre de caractères de $ chaîne .
  • ligne 73 : la fonction substr($ligne, $position, $taille) rend $ taille caractères de $ ligne , pris à partir du caractère n° $ position , le 1 er caractère ayant le n° 0. Sur les machines windows, la marque de fin de ligne est "\r\n". Sur les machines Unix, c'est la chaîne "\n".
  • ligne 35 : la fonction array_shift($tableau) élimine le 1 er élément de $ tableau et le rend comme résultat.
  • ligne 37 : la fonction array_shift($tableau) est utilisée mais on néglige son résultat
  • ligne 57 : la fonction is_array($variable) rend true si $ variable est un tableau, false sinon.
  • ligne 58 : la fonction join fait la même chose que la fonction implode déjà rencontrée

précédentsommairesuivant

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2013 Serge Tahé. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.