45 min
Etude du langage PHP
I La syntaxe de base II Les types
Quand PHP commence le traitement d’un fichier, il ce contant de l’afficher tant qu’il ne trouve pas les balises qui lui indique qu’il s’agit de code PHP.
|
Le passage du HTML au PHP
|
Les lignes d’instructions doivent être séparé par des points virgules comme en C, Pascal, Perl …
<?php echo "Ceci est un test";?> |
Les commentaires sont écrits comme en C, C++
<?php echo "Ceci est un test"; // Ceci est un commentaire sur une ligne comme en C++ /* Ceci est un commentaire sur plusieurs lignes,comme en C et C++ */ echo "Ceci est encore un test"; echo "Enfin, le test final"; # Ceci est un commentaire comme en Shell Unix?> |
PHP supporte les 8 types simple suivants :
· booléen
· entier
· nombre à virgule flottante
· chaîne de caractères
· tableau
· objet
Il est courant que le type d'une variable ne soit pas déclaré par le programmeur. Il est décidé au moment de l'exécution par le PHP, en fonction du contexte dans lequel la variable est utilisée.
C'est le type le plus simple. Un booléen prend deux valeurs : vrai TRUE ou FALSE.
Vous pouvez utiliser les constantes 'TRUE' et 'FALSE' pour spécifier une valeur de type booléen. Généralement, vous les créerez avec un des opérateurs qui retourne une valeur booléen, pour le passer à une structure de contrôle.
<?php if ($action == "show_version"){// == is an operator // qui retourne un booléen echo "La version est 1.23"; }// ceci n'est pas nécessaire if ($show_separators == true){ echo "<hr>\n"; }// ceci est plus pratique if ($show_separators){ echo "<hr>\n"; }?> |
Note: Le type booléen a été introduit en PHP 4.
Un entier est un nombre. Il existe dans plusieurs formats : décimale (base 10), hexadécimale (base 16), octale (base 8) . Il peut être éventuellement précédé du signe moins (-).
Pour utiliser la notation octale, vous devez préfixer le nombre avec un zéro; pour utiliser la notation hexadécimale, vous devez préfixer le nombre avec 0x.
<?php $a = 1234; # nombre entier en base 10 $a = -123; # nombre entier négatif $a = 0123; # nombre entier en base 8, octale (équivalent à 83 en base 10) $a = 0x12; # nombre entier en base 16, hexadécimale # (équivalent à 18 en base 10)?> |
La taille d’un entier dépend de la plate-forme matériel, la valeur maximum sur un processeur 32 bits est de (2^32)/2 car PHP ne support pas les entiers non signés.
Les nombres à virgule flottante peuvent être spécifiés en utilisant la syntaxe suivante:
<?php $a = 1.234; $a = 1.2e3;?> |
Les chaînes de caractères sont une suite de caractères. PHP ne possède pas encore de support natif Unicode.
Une chaîne peut être délimité de trois manières différentes :
· guillemets simples
· guillemets doubles
Le moyen le plus simple de délimiter une chaîne de caractères est d'utiliser les guillemets simples : '.
Pour spécifier un guillemet simple littéral, vous devez l'échapper avec un anti-slash (\), comme dans de nombreux langages. Si un anti-slash doit apparaître dans votre chaîne ou bien en fin de chaîne, il faudra le doubler. Notez que si vous essayez d'échapper n'importe quel autre caractère, l'anti-slash sera conservé! Il n'y a pas besoin d'échapper d'autres caractères que le guillemets lui-même.
Note: Contrairement aux autres syntaxes, les variables présentes dans la chaîne ne seront PAS remplacées par leurs valeurs.
<?php echo 'Ceci est une chaîne simple'; echo 'Vous pouvez inclure des nouvelles lignes dans une chaîne, comme ceci.';echo 'Arnold a coutume de dire : "I\'ll be back"'; // affiche : ... "I'll be back" echo 'Etes vous sÛr de vouloir effacer le dossier C:\\*.*?';// affiche : Etes vous sÛr de vouloir effacer le dossier C:\*.*? echo 'Etes vous sÛr de vouloir effacer le dossier C:\*.*?';// affiche : Etes vous sÛr de vouloir effacer le dossier C:\*.*? echo 'Je suis en train de mettre une nouvelle ligne comme ceci : \n';// affiche : Je suis en train de mettre une nouvelle ligne comme ceci : \n ?> |
Si la chaîne est entourés de guillemets doubles, PHP va comprendre certaines séquences de caractères :
Les caractères spéciaux
|
Séquence |
Valeur |
|
\n |
Nouvelle ligne (linefeed, LF ou 0x0A (10) en ASCII) |
|
\r |
Retour à la ligne(carriage return, CR ou 0x0D (13) en
ASCII) |
|
\t |
Tabulation horizontale (HT ou 0x09 (9) en ASCII) |
|
\\ |
Antislash |
|
\$ |
Caractère $ |
|
\" |
Guillemets doubles |
|
\[0-7]{1,3} |
Une séquence de caractères qui permet de rechercher un
nombre en notation octale. |
|
\x[0-9A-Fa-f]{1,2} |
Une séquence de caractères qui permet de rechercher un
nombre en notation hexadécimale. |
Si vous essayez d'utiliser l'anti-slash sur n'importe quelle autre séquence, l'anti-slash sera affiché dans votre chaîne.
Le plus important des chaînes à guillemets doubles est le fait que les
variables qui s'y trouvent seront remplacées par leurs valeurs. Voir la section
sur le traitement des variables dans les chaînes pour plus de détails.
Un tableau PHP est en fait une association ordonnée (map). Une association est un type qui fait correspondre des valeurs à des clés. Ce type est optimisé de diverses façons, qui font que vous pouvez le manipuler comme un tableau à indices réels, une liste (vecteur), ou un table de hachage (qui est une implémentation d'association), dictionnaire, collection, pile, queue et encore d'autres. Comme une valeur peut elle-même être un tableau, vous pouvez simuler facilement un arbre.
Les détails d'implémentation de ces structures sont hors du champs de ce manuel, mais vous trouverez ici un exemple de toutes ces structures.
Un tableau peut être initialisé via la fonction array(). Cette fonction prend en paramètre une liste d’argument séparé par des virgule.
Il est possible de modifier un tableau existant en lui affectant une nouvelle valeur a un index précis.
L'affectation de la valeurs de le tableau se fait en précisant la clé entre crochets. Si vous omettez la clé ("$tableau[]"), la valeur sera ajoutée à la fin du tableau.
$arr[key] = value;$arr[] = value; // key est soit une chaîne, soit un entier // value peut être n'importe quoi |
Le type tableau de PHP est très souple. Voici un exemple d'utilisation :
<?php // ceci $a = array( 'couleur' => 'rouge' , 'gout' => 'sucre' , 'forme' => 'rond', 'nom' => 'pomme' , 4 // cette clé sera 0 );// est complétement équivalent à $a['couleur'] = 'rouge'; $a['gout'] = 'sucre'; $a['forme'] = 'rond';$a['nom'] = 'pomme'; $a[] = 4; // cette clé sera 0 $b[] = 'a'; $b[] = 'b'; $b[] = 'c';// va créer le tableau array( 0 => 'a' , 1 => 'b' , 2 => 'c' ) // ou plus simplement array('a' , 'b' , 'c' )?< |
Pour créer une nouvelle instance d’un objet, il faut utiliser la command new.
<?php class foo { function faire_foo () { echo "Faisant foo."; } } $bar = new foo; $bar->faire_foo();?> |
PHP fourni un grand nombre de variables prédéfinies. Cependant, beaucoup de ces variables dépend du serveur Web utilisé. Certaine dépende aussi su mode de fonctionnement de PHP librairie ou exécutable.
La liste des variables ci-dessous seront accessible avec PHP3 e module avec Apache 1.3.6.
Pour la liste complète des variables prédéfinies reportez-vous phpinfo() dans l’aide de PHP.
Note: Cette liste n'est pas exhaustive et ne le sera pas. C'est simplement un aperçu des variables prédéfinies qui peuvent être accessibles dans les scripts.
Ces variables sont créées par le serveur Apache. Si vous utilisez un autre serveur web, il n'est pas sur que celui-ci vous fournira les mêmes variables. Il peut ne pas les fournir, en fournir d'autres. Cependant, un bon nombre de ces variables font partie de l'interface CGI 1.1, et on peut s'attendre à les retrouver.
Notez que peu d'entre elles seront accessibles lorsque PHP est appelé en ligne de commande, (et elles n'auront alors peut être pas de sens)
$GATEWAY_INTERFACE
Numéro de révision de l'interface CGI du serveur : i.e. 'CGI/1.1'.
$SERVER_NAME
Le nom du serveur hôte qui exécute le script suivant. Si le script est exécuté sur un hôte virtuel, ce sera la valeur définie pour cet hôte virtuel.
$SERVER_SOFTWARE
Chaîne d'identification du serveur, qui est donnée dans les en-têtes lors de la réponse aux requêtes.
$SERVER_PROTOCOL
Nom et révision du protocole de communication : i.e. 'HTTP/1.0';
$REQUEST_METHOD
Méthode de requête utilisée pour accéder à la page; i.e. 'GET', 'HEAD', 'POST', 'PUT'.
$QUERY_STRING
La chaîne de requête, si elle existe, qui est utilisée pour accéder à la page.
$DOCUMENT_ROOT
La racine sous laquelle le script courant est exécuté, comme défini dans la configuration du serveur.
$HTTP_ACCEPT
Contenu de l'en-tête Accept: de la requête courante, s'il y en a une.
$HTTP_ACCEPT_CHARSET
Contenu de l'en-tête Accept-Charset: de la requête courante, s'elle existe. Par exemple : 'iso-8859-1,*,utf-8'.
$HTTP_ACCEPT_ENCODING
Contenu de l'en-tête Accept-Encoding: de la requête courante, si elle existe. Par exemple : 'gzip'.
$HTTP_ACCEPT_LANGUAGE
Contenu de l'en-tête Accept-Language: de la requête courante, si elle existe. Par exemple : 'en'.
$HTTP_CONNECTION
Contenu de l'en-tête Connection: de la requête
courante, si elle existe. Par
exemple : 'Keep-Alive'.
$HTTP_HOST
Contenu de l'en-tête Host: de la requête courante, si elle existe.
$HTTP_REFERER
L'adresse de la page (si elle existe) qui a conduit le client à la page courante. Cette valeur est affectée par le client, et tous les clients ne le font pas.
$HTTP_USER_AGENT
Contenu de l'en-tête User_Agent: de la requête courante, si elle existe. C'est une chaîne qui décrit le client HTML utilisé pour voir la page courante. Par exemple : Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Entre autres choses, vous pouvez utiliser cette valeur avec get_browser() pour optimiser votre page en fonction des capacités du client.
$REMOTE_ADDR
L'adresse IP du client qui demande la page courante.
$REMOTE_PORT
Le port utilisé par la machine cliente pour communiquer avec le serveur web.
$SCRIPT_FILENAME
Le chemin absolu jusqu'au script courant.
$SERVER_ADMIN
La valeur donnée à la directive SERVER_ADMIN (pour Apache), dans le fichier de configuration. Si le script est exécuté par un hôte virtuel, ce sera la valeur définie par l'hôte virtuel.
$SERVER_PORT
Le port de la machine serveur utilisé pour les communications. Par défaut, c'est '80'. En utilisant SSL, par exemple, il sera remplacé par le numéro de port HTTP sécurisé.
$SERVER_SIGNATURE
Chaîne contenant le numéro de version du serveur et le nom d'hôte virtuel, qui sont ajoutés aux pages générées par le serveur, si cette option est activée.
$PATH_TRANSLATED
Chemin dans le système de fichier (pas le document root-) jusqu'au script courant, une fois que le serveur a fait une chemin traduction virtuel->réel.
$SCRIPT_NAME
Contient le nom du script courant. Cela sert lorsque les pages doivent s'appeler elles-mêmes.
$REQUEST_URI
L'URI qui a été fourni pour accéder à cette page. Par exemple : '/index.html'.
Ces variables sont importées dans l'espace des variables global de PHP, depuis l'environnement sous lequel PHP fonctionne. Beaucoup d'entre elles sont fournies par le shell qui exécute PHP et différents systèmes étant susceptibles de disposer de différents shells, une liste définitive est impossible à établir. Reportez-vous à la documentation de votre shell, pour connaître la liste des variables d'environnement prédéfinies.
Les autres variables d'environment incluent les variables CGI, placées ici, quelquefois la méthode d'exécution de PHP (CGI ou module).
Ces variables sont créées par PHP lui_même. Les variables $HTTP_*_VARS ne sont disponibles que si l'option de configuration track_vars a été activée. Lorsque c'est le cas, ces variables existent toujours, même si ce sont des tableaux vides. Cela évite les usurpations mal intentionnées de ces variables.
Note: Depuis PHP 4.0.3, track_vars est toujours activé, quelle que soit la configuration.
Si la directive register_globals est activée, alors ces variables seront aussi disponibles comme variables globales du script : c'est-à-dire, indépendamment des tableaux $HTTP_*_VARS. Cette fonctionnalité doit être utilisée avec précautions, et de préférence, désactivée. Si $HTTP_*_VARS est sécurisé, les équivalents globaux peuvent être écrasés par les données d'entrée de l'utilisateur, avec des intrusions possibles. Si vous ne pouvez pas désactiver register_globals, vous devez prendre toutes les dispositions possibles pour vous assurer que les données utilisées sont sÛres.
$argv
Tableau des arguments passées au script. Lorsque le script est appelé en ligne de commande, cela donne accès aux arguments, comme en langage C. Lorsque le script est appelé avec la méthode GET, ce tableau contiendra la chaîne de requête.
$argc
Contient le nombre de paramètres de la ligne de commande passés au script (si le script fonctionne en ligne de commande).
$PHP_SELF
Le nom du fichier du script en cour d'éxécution, par rapport au document root. Si PHP fonctionne en ligne de commande, cette variable n'est pas disponible.
$HTTP_COOKIE_VARS
Un tableau associatif des variables passées au script courant via les HTTP cookies. Uniquement possible si le suivi des variables a été activé avec la directive générale track_vars ou avec la directive locale <? php_track_vars ?>.
$HTTP_GET_VARS
Un tableau associatif des variables passées au script courant via les HTTP GET. Uniquement possible si le suivi des variables a été activé avec la directive générale track_vars ou avec la directive locale <? php_track_vars ?>.
$HTTP_POST_VARS
Un tableau associatif des variables passées au script courant via les HTTP POST. Uniquement possible si le suivi des variables a été activé avec la directive générale track_vars ou avec la directive locale <? php_track_vars ?>.
$HTTP_POST_FILES
Un tableau associatif contenant les informations sur les fichiers téléchargés avec la méthode HTTP POST. Reportez-vous au chapitre Téléchargement par méthode POST pour plus de détails sur le contenu de $HTTP_POST_FILES.
$HTTP_POST_FILES n'est disponible que dans les versions 4.0.0 et plus récentes de PHP.
$HTTP_ENV_VARS
Un tableau associatif des variables passées au script par l'environnement parent.
$HTTP_SERVER_VARS
Un tableau associatif des variables passées au script par le serveur HTTP. Ces variables sont analogues aux variables décrites ci-dessus.
Lorsqu'un formulaire est envoyé à un script PHP, les variables du formulaire seront automatiquement disponibles dans le script. Par exemple, considérons le formulaire suivant:
|
Exemple avec un formulaire simple
|
Lorsque ce formulaire est envoyé, PHP va créer la variable $name, qui contiendra la valeur que vous avez entrée dans le champs Name: du formulaire.
Le PHP permet aussi l'utilisation des tableaux dans le contexte de formulaire, mais seulement des tableaux à une seule dimension. Comme cela, vous pouvez rassembler des variables ou utiliser cette fonctionnalité pour récupérer les valeurs d'un choix multiple :
|
Variables complexes de formulaire
|
Si l'option "track_vars" est activée, soit par l'option de compilation track_vars, soit par la directive de configuration <? php_track_vars ?>, les variables transmises par les méthodes POST et GET pourront aussi être trouvées dans le tableau associatif global $HTTP_POST_VARS ou $HTTP_GET_VARS suivant la méthode utlisée.
Lorsque vous envoyez le résultat d'un formulaire, vous pouvez utiliser une image au lieu du bouton "submit" standard en utilisant un tag :
<input type=image src="image.gif" name="sub"> |
Lorsqu'un utilisateur clique sur l'image, le formulaire sera transmis au serveur avec deux variables de plus, sub_x et sub_y. Ces deux variables contiennent les coordonnées de l'endroit où l'utilisateur à cliqué. Les utilisateurs expérimentés remarqueront que les noms de variables sont transmis avec une virgule à la place du caractère "_", mais le PHP fait la conversion automatiquement.
Le PHP supporte les cookies HTTP de manière totalement transparente, comme défini dans les Netscape's Spec. Les cookies sont un mécanisme permettant de stocker des données sur la machine cliente à des fins d'authentification de l'utilisateur. Vous pouvez établir un cookie grâce à la fonction setcookie(). Les cookies font partie intégrante du "header" HTTP, et donc la fonction setcookie() doit être appelée avant que le moindre affichage ne soit envoyé au navigateur. C'est la même restriction que pour la fonction header(). Tout cookie envoyé depuis le client sur le serveur sera automatiquement stocké sous forme de variable, comme pour la méthode POST ou GET.
Si vous souhaitez assigner plusieurs valeurs à un seul cookie, il vous faut
ajouter les caractères [] au nom de votre cookie. Par exemple :
<?phpsetcookie ("MonCookie[]", "test", time()+3600);?> |
Il est à noter qu'un cookie remplace le cookie précédent par un cookie de même nom tant que le "path" ou le domaine sont identiques. Donc, pour une application de caddie, vous devez implémenter un compteur et l'incrémenter au fur et à mesure. C'est-à-dire:
|
Exemple avec setcookie()
|
Tableau 10-1. Opérations élémentaires
|
Exemple |
Nom |
Résultat |
|
$a + $b |
Addition |
Somme de $a et $b. |
|
$a - $b |
Soustraction |
Différence de $a et $b. |
|
$a * $b |
Multiplication |
Produit de $a et $b. |
|
$a / $b |
Division |
Quotient de $a et $b. |
|
$a % $b |
Modulo |
Reste de $a divisé par $b. |
L'opérateur de division ("/") retourne une valeur entière (le résultat d'une division entière) si les deux opérandes sont entiers (ou bien des chaînes converties en entier. Si l'un des opérandes est un nombre à virgule flottante, ou bien le résultat d'une opération qui retourne une valeur non entière, un nombre à virgule flottante sera retourné.
Les opérateurs de comparaison, comme leur nom l'indique, vous permettent de comparer deux valeurs.
Tableau 10-3. Opérateurs de comparaison
|
Exemple |
Nom |
Résultat |
|
$a == $b |
Egal |
Vrai si $a est égal à $b. |
|
$a === $b |
Identique |
Vrai si $a est égal à $b et qu'ils sont de même type (PHP
4 seulement). |
|
$a != $b |
Différent |
Vrai si $a est différent de $b. |
|
$a <> $b |
Différent |
Vrai si $a est différent de $b. |
|
$a < $b |
Plus petit que |
Vrai si $a est plus petit strictement que $b. |
|
$a > $b |
Plus grand |
Vrai si $a est plus grand strictement que $b. |
|
$a <= $b |
Inférieur ou égal |
Vrai si $a est plus petit ou égal à $b. |
|
$a >= $b |
Supérieur ou égal |
Vrai si $a est plus grand ou égal à $b. |
Un autre opérateur conditionnel est l'opérateur ternaire (":?"), qui fonctionne comme en langage C.
<?php (expr1) ? (expr2) : (expr3);?> |
Cette expression renvoie la valeur de l'expression expr2 si l'expression expr1 est vraie, et l'expression expr3 si l'expression expr1 est fausse.
PHP supporte les opérateurs de pré et post incrémentation et décrémentation, comme en C.
Tableau 10-4. Opérateurs d'incrémentation/Décrémentation
|
Exemple |
Nom |
Résultat |
|
++$a |
Pré-incrémente |
Incrémente $a de 1, puis retourne $a. |
|
$a++ |
Post-incrémente |
Retourne $a, puis l'incrémente de 1. |
|
--$a |
Pré-décrémente |
Décrémente $a de 1, puis retourne $a. |
|
$a-- |
Post-décrémente |
Retourne $a, puis décrémente $a de 1. |
Voici un exemple simple
<?php echo "<h3>Post-incrémentation</h3>"; $a = 5;echo "Devrait valoir 5: " . $a++ . "<br>\n"; echo "Devrait valoir 6: " . $a . "<br>\n"; echo "<h3>Pré-incrémentation</h3>"; $a = 5;echo "Devrait valoir 6: " . ++$a . "<br>\n"; echo "Devrait valoir 6: " . $a . "<br>\n"; echo "<h3>Post-décrémentation</h3>"; $a = 5;echo "Devrait valoir 5: " . $a-- . "<br>\n"; echo "Devrait valoir 4: " . $a . "<br>\n"; echo "<h3>Pré-décrémentation</h3>"; $a = 5;echo "Devrait valoir 4: " . --$a . "<br>\n"; echo "Devrait valoir 4: " . $a . "<br>\n"; ?> |
Il y a deux opérateurs de chaînes. Le premier est l'opérateur de concaténation ('.'), qui retourne la concaténation de ses deux arguments. Le second est l'opérateur d'assignation concaténant ('.='). Reportez-vous à Opérateurs d'assignations dans la documentation PHP pour plus de détails.
<?php $a = "Bonjour "; $b = $a . "Monde!";// $b contient "Bonjour Monde!" $a = "Bonjour "; $a = $a . "Monde!";// $a contient "Bonjour Monde!" ?> |
L'instruction if est une des plus importantes instructions de tous les langages, PHP inclus. Elle permet l'exécution conditionnelle d'une partie de code. Les fonctionnalités de l'instruction if sont les mêmes en PHP qu'en C :
<?php if (expression) commandes?> |
Comme nous l'avons vu dans le paragraphe consacré aux expressions, expr est évaluée à sa vraie valeur. Si l'expression expr est TRUE, PHP exécutera l'instruction et si elle est FALSE, l'instruction sera ignorée.
L'exemple suivant affiche la phrase a est plus grand que b si $a est plus grand que $b:
<?php if ($a > $b) print "a est plus grand que b";?> |
Souvent, vous voulez que plusieurs instructions soient exécutées après un branchement conditionnel. Bien évidemment, il n'est pas obligatoire de répéter l'instruction conditionnelle autant de fois que vous avez d'instructions à exécuter. A la place, vous pouvez rassembler toutes les instructions dans un bloc. L'exemple suivant affiche a est plus grand que b, et assigne la valeur de la variable $a à la variable $b:
<?phpif ($a > $b) { print "a est plus grand que b"; $b = $a;} ?> |
Vous pouvez imbriquer indéfiniment des instructions if les unes dans les autres, ce qui permet une grande flexibilité dans l'exécution d'une partie de code suivant un grand nombre de conditions.
Souvent, vous voulez exécuter une instruction si une condition est remplie, et une autre instruction si cette condition n'est pas remplie. C'est à cela que sert else. else fonctionne après un if et exécute les instructions correspondantes au cas oú l'expression du if est FALSE. Dans l'exemple suivant, ce bout de code affiche a est plus grand que b si la variable $a est plus grande que la variable $a, et a est plus petit que b sinon:
<?phpif ($a > $b) { print "a est plus grand que b";} else { print "a est plus petit que b";} ?> |
Les instructions après le else ne sont exécutées que si l'expression du if est FALSE, et si elle n'est pas suivi par l'expression elseif.
elseif, comme son nom l'indique, est une combinaison de if et de else. Comme l'expression else, il permet d'exécuter une instruction aprè un if dans le cas oú le "premier" if est évalué comme FALSE. Mais, à la différence de l'expression else, il n'exécutera l'instruction que si l'expression condionnelle elseif est évaluée comme TRUE. L'exemple suivant affichera a est plus grand que b, a est égal à b ou a est plus petit que b:
<?phpif ($a > $b) { print "a est plus grand que b";} elseif ($a == $b) { print "a est égal à b";} else { print "a est plus petit que b";} ?> |
Vous pouvez avoir plusieurs elseif qui s'imbriquent les uns dans les autres, après un if initial. Le premier elseif qui sera évalué à TRUE sera exécuté. En PHP, vous pouvez aussi écrire "else if" en deux mots et son comportement sera identique à la version en un seul mot.
L'expression elseif est exécutée seulement si le if précédent et tout autre elseif précédent est évalués comme FALSE, et que votre elseif est évalué à TRUE.
La boucle while est le moyen le plus simple d'implémenter une boucle en PHP. Cette boucle se comporte de la même manière qu'en C. L'exemple le plus simple d'une boucle while est le suivant :
<?php while (expression) commandes ?> |
La signification d'une boucle while est très simple. Le PHP exécute l'instruction tant que l'expression de la boucle while est évaluée comme TRUE. La valeur de l'expression est vérifiée à chaque début de boucle, et, si la valeur change durant l'exécution de l'instruction, l'exécution ne s'arrêtera qu'à la fin de l'itération (chaque fois que le PHP exécute l'instruction, on appelle cela une itération). De temps en temps, si l'expression du while est FALSE avant la première itération, l'instruction ne sera jamais exécutée.
Comme avec le if, vous pouvez regrouper plusieurs instructions dans la même boucle while en les regroupant à l'intérieur de parenthèses ou en utilisant la syntaxe suivante:
<?php while (expression): commandes ... endwhile; ?> |
Les exemples suivants sont identiques, et affichent tous les nombres de 1 à 10:
<?php/* exemple 1 */$i = 1;while ($i <= 10) {print $i++; /* La valeur affiche est $i avant l'incrémentation (post-incrémentation) */ } /* exemple 2 */ $i = 1;while ($i <= 10): print $i; $i++;endwhile; ?> |
Les boucles do..while ressemblent beaucoup aux boucles while, mais l'expression est testée à la fin de chaque itération plutôt qu'au début. La principale différence par rapport à la boucle while est que la première itération de la boucle do..while est toujours exécutée (l'expression n'est testée qu'à la fin de l'itération), ce qui n'est pas le cas lorsque vous utilisez une boucle while (l'expression est vérifiée au début de chaque itération).
Il n'y a qu'une syntaxe possible pour les boucles do..while:
<?php$i = 0;do { print $i;} while ($i>0);?> |
La boucle ci-dessus ne va être exécutée qu'une seule fois, car lorsque l'expression est évaluée, elle vaut FALSE (car la variable $i n'est pas plus grande que 0) et l'exécution de la boucle s'arrête.
Les utilisateurs familiers du C sont habitués à une utilisation différente des boucles do..while , qui permet de stopper l'exécution de la boucle au milieu des instructions, en l'encapsulant dans un do..while(0) la fonction break. Le code suivant montre une utilisation possible:
<?phpdo { if ($i < 5) { print "i n'est pas suffisamment grand";break; } $i *= $factor; if ($i < $minimum_limit) { break; } print "i est bon";...process i... } while(0);?> |
Ne vous inquiétez pas si vous ne comprenez pas tout correctement. Vous pouvez écrire des scripts très très puissants sans utiliser cette fonctionnalité.
Les boucles for sont les boucles les plus complexes en PHP. Elles fonctionnent comme les boucles for du langage C. La syntaxe des boucles for est la suivante:
<?phpfor (expr1; expr2; expr3) statement?> |
La première expression (expr1) est évaluée (exécutée), quoi qu'il arrive au début de la boucle.
Au début de chaque itération, l'expression expr2 est évaluée. Si l'évaluation vaut TRUE, la boucle continue et l'instruction est exécutée. Si l'évaluation vaut FALSE, l'exécution de la boucle s'arrête.
A la fin de chaque itération, l'expression expr3 est évaluée (exécutée).
Les expressions peuvent éventuellement être laissées vides. Si l'expression expr2 est laissée vide, cela signifie que c'est une boucle infinie (PHP considère implicitement qu'elle vaut TRUE, comme en C). Cela n'est pas vraiment très utile, à moins que vous souhaitiez terminer votre boucle par l'instruction conditionnelle break.
Considérons les exemples suivants. Tous affichent les chiffres de 1 à 10:
<?php/* exemple 1 */for ($i = 1; $i <= 10; $i++) { print $i;}/* exemple 2 */for ($i = 1;;$i++) { if ($i > 10) { break; } print $i;}/* exemple 3 */$i = 1;for (;;) { if ($i > 10) { break; } print $i; $i++;}/* exemple 4 */for ($i = 1; $i <= 10; print $i, $i++) ;?> |
Bien évidemment, le premier exemple est le plus simple de tous (ou peut être le quatrième), mais vous pouvez aussi pensez qu'utiliser une expression vide dans une boucle for peut être utile parfois.
PHP supporte aussi la syntaxe alternative suivante pour les boucles for :
<?phpfor (expr1; expr2; expr3): statement; ...; endfor;?> |
Les autres langages ont l'instruction foreach pour accéder aux éléments d'un tableau. PHP 3 ne dispose pas d'une telle fonction; PHP 4 en dispose (voir foreach). En PHP 3, vous pouvez combiner while avec list() et each() pour obtenir le même résultat. Reportez-vous aux exemples de la documentation.
PHP 4 (mais pas PHP 3) inclut une commande foreach, comme en Perl ou d'autres langages. C'est un moyen simple de passer en revue un tableau. Il y a deux syntaxes possibles : la seconde est une extension mineure mais pratique de la première:
<?php foreach(array_expression as $value) commandes foreach(array_expression as $key => $value) commandes?> |
La première forme passe en revue le tableau array_expression. A chaque itération, la valeur de l'élément courant est assignée à $value et le pointeur interne de tableau est avancé d'un élément (ce qui fait qu'à la prochaine itération, on accédera à l'élément suivant).
La deuxième forme fait exactement la même chose, mais c'est la clé de l'élément courant qui est assigné à la variable $key.
Lorsque foreach démarre, le pointeur interne de fichier est automatiquement ramené au premier élément du tableau. Cela signifie que vous n'aurez pas à faire appel à reset() avant foreach.
Note: De plus, notez que foreach travaille sur une copie du tableau spécifié, et pas sur le tableau lui-même. Par conséquent, le pointeur de tableau n'est pas modifié, comme il le serait avec le fonction each(), et les modifications faites dans le tableau ne seront pas prises en compte dans le tableau original.
Note: foreach n'accepte pas l'opérateur de supppression des erreurs @.
Vous pouvez remarquer que les exemples suivants fonctionnent de manière identique :
<?php reset($arr); while (list(, $value) = each ($arr)) { echo "Valeur: $value<br>\n"; } foreach ($arr as $value) { echo "Valeur: $value<br>\n"; }?> |
L'instruction break permet de sortir d'une structure for, while, foreach ou switch.
break accepte un argument numérique optionnel qui vous indiquera combien de structures emboitées ont été interrompues.
<?php$i = 0;while ($i < 10) { if ($arr[$i] == "stop") {break; /* Vous pouvez aussi écrire 'break 1;' ici. */ } $i++;} /* Utilisation de l'argument optionnel. */$i = 0;while ( ++$i ) { switch ( $i ) { case 5: echo "à 5<br>\n";break 1; /* Ne sort que du switch. */ case 10: echo "à 10; quitting<br>\n";break 2; /* Sort du switch et du while. */ default: break; }} ?> |
L'instruction switch équivaut à une série d'instructions if. En de nombreuses occasions, vous aurez besoin de comparer la même variable (ou expression) avec un grand nombre de valeurs différentes, et d'exécuter différentes parties de code suivant la valeur à laquelle elle est égale. C'est exactement à cela que sert l'instruction switch.
Les deux exemples suivants sont deux manières différentes d'écrire la même chose, l'une en utilisant une séries de if, et l'autre en utilisant l'instruction switch:
<?phpif ($i == 0) { print "i égale 0";}if ($i == 1) { print "i égale 1";}if ($i == 2) { print "i égale 2";}switch ($i) { case 0: print "i égale 0";break; case 1: print "i égale 1"; break; case 2: print "i égale 2"; break;} ?> |
Il est important de comprendre que l'instruction switch exécute chacune des
clauses dans l'ordre. L'instruction switch est exécutée ligne par ligne. Au
début, aucun code n'est exécuté. Seulement lorsqu'un case est
vérifié, PHP exécute alors les instructions correspondantes. PHP continue
d'exécuter les instructions jusqu'à la fin du bloc d'instructions du switch, ou bien
dès qu'il trouve l'instruction break. Si vous ne pouvez pas utiliser l'instruction break à la fin
de l'instruction case,
PHP continuera à exécuter toutes les instructions qui suivent. Par exemple :
<?phpswitch ($i) { case 0: print "i égale 0";case 1: print "i égale 1"; case 2: print "i égale 2";} ?> |
Dans cet exemple, si $i est égal à 0, PHP va exécuter quand même toutes les instructions qui suivent. Si $i est égal à 1, PHP exécutera les deux dernières instructions. Et seulement si $i est égal à 2, vous obtiendrez le résultat escompté, c'est-à-dire, l'affiche de "i égal 2". Donc, l'important est de ne pas oublier l'instruction break (même s'il est possible que vous l'omettiez dans certaines circonstances).
Une fonction peut être définie en utilisant la syntaxe suivante :
<?phpfunction foo ($arg_1, $arg_2, ..., $arg_n) { echo "Exemple de fonction.\n"; return $retval;} ?> |
Tout code PHP, correct syntaxiquement, peut apparaître dans une fonction et dans une définition de classe.
En PHP 3, les fonctions doivent être définies avant qu'elles ne soient utilisées. Ce n'est plus le cas en PHP 4.
PHP ne supporte pas le surchargement de fonction, ni la destruction ou la redéfinition de fonctions déjà déclarées.
PHP 3 ne supporte pas un nombre variable d'arguments (voir valeurs par défault d'arguments pour plus d'informations). PHP 4 supporte les deux : voir liste variable d'arguments de fonction et les fonctions de références que sontfunc_num_args(), func_get_arg(), et func_get_args() pour plus d'informations.
Des informations peuvent être passées à une fonction en utilisant un tableau d'arguments, dont chaque élément est séparé par une virgule. Un élément peut être une variable ou une constante.
PHP supporte le passage d'arguments par valeur (méthode par défaut), par référence. Les listes variables d'arguments sont supportées par PHP 4 et les versions plus récentes. Voir liste variable d'arguments de fonction et les fonctions utiles que sont func_num_args(), func_get_arg(), et func_get_args(). Fonctionnellement, on peut arriver au même résultat en passant un tableau comme argument :
function takes_array($input) { echo "$input[0] + $input[1] = ", $input[0]+$input[1];} |
La fonction mail envoie un e-mail. Sous les systèmes Unix elle utilise la commande Sendmail, sous Windows elle effectue une connexion sur un serveur SMTP. Si l'e-mail est envoyé correctement la fonction retourne TRUE. Pour spécifier plusieurs destinataires, il faut les séparer par un point virgule.
function mailAttachment($to, $from, $subject, $body)
{
//add from header
$headers = "From: $from\r\n";
//specify MIME version 1.0
$headers .= "MIME-Version: 1.0\r\n";
//send message
mail($to, $subject, $body, $headers);
}
|
Il est possible avec PHP d'utiliser beaucoup de base de données. Ceci est un exemple de connexion a une base Interbase. Le scénario de connexion au différentes base est très similaire.
Pour faire des test, nous allons nous connecter a une base de démonstration employee.gdb.Structure de la table employee
| EMP_NO | SMALLINT |
| LAST_NAME | VARCHAR(20) |
| FIRST_NAME | VARCHAR(15) |
| PHONE_EXT | VARCHAR(4) |
| HIRE_DATE | TIMESTAMP |
| DEPT_NO | CHAR(3) |
| JOB_CODE | VARCHAR(5) |
| JOB_GRADE | SMALLINT |
| JOB_COUNTRY | VARCHAR(15) |
| SALARY | NUMERIC(15, 2) |