Chapter 3. PHP

Table of Contents

Les opérateurs
Opérateurs sur les nombres
Opérateurs booléens
Affectation et affection combinées
Opérateurs de comparaison
Les tableaux
Enumérations
Déclaration et affectation
Parcours
Les fonctions
Définition d'une fonction
Appel d'une fonction
Exemple de fonction

PHP est un langage interprété exécuté du côté serveur (comme les scripts CGI, ASP, ...) et non du côté client (par exemple un code Javascript ou une applet Java s'exécute sur votre ordinateur...). La syntaxe du langage est inspirée de celles du langage C, du Perl et de Java.

La grande force de tels langages (PHP ou ASP) réside dans les fonctionnalités de programmation qu'ils offrent pour traiter des problèmes liés au developpement de services web. Par exemple, des fonctions de traitements de chaînes de caractères puissantes sont fournies. Une autre grande classe de besoin pour les développements web concerne l'utilisation de base de données. PHP propose une interface vers de nombreux gestionnaires de bases de données, permettant au programmeur d'accéder à un système de gestion de base de données à travers des primitives du langage. PHP supporte des interfaces vers les bases de données suivantes : Adabas D, dBase, Empress, FilePro, Hyperware, IBM DB2, Informix, Ingres, Interbase, Frontbase, Direct MS-SQL, mSQL, MySQL, Oracle (version 7 et 8), Ovrimos, PostgreSQL, Sesam, Solid, Sybase, Velocis et Unix dbm. Quand une base de données n'est pas interfacée, il est en outre possible d'utiliser le format ODBC.

Les opérateurs

Les exemples donnés supposent que la valeur de $x est 8, $c est "la ", et $b est TRUE;

Opérateurs sur les nombres

opérateurdénominationexemplerésultat
+addition$x+412
-soustraction$x-44
*multiplication$x*324
/division$x/24

Opérateurs booléens

|| ou OROU logique$b OR FALSETRUE
|| ou OROU logique$b OR FALSETRUE
&& ou ANDET logique$b AND TRUETRUE
XOROU exclusif$b XOR FALSEFALSE

Affectation et affection combinées

=affectation$x=5$x==5
+=incrémentation et affectation$x+=6$x==14
-=soustraction$x-=6$x==2
/=division$x/=2$x==4
%=division entière$x%=3$x==2
|=effectue un OU logique$b |= FALSE$b==TRUE
^=effectue un OU exclusif logique$b ^= FALSE$b==TRUE
&=effectue un ET logique$b &= FALSE$b==FALSE
.=concatène la chaîne à droite à celle de gauche$c .= "fin"$c=="la fin"

Opérateurs de comparaison

!=différent$x!=10TRUE
==égalité$x==10FALSE
<=inférieur ou égal$x<=10TRUE
<inférieur$x<10TRUE
>=supérieur ou égal$x>=10FALSE
>supérieur$x>10FALSE

Les tableaux

Les tableaux PHP sont des tableaux associatifs, c'est-à-dire que ce sont des listes d'associations entre une clé et une valeur. Cette notion est plus générale que celle de tableau simple que l'on rencontre habituellement : les tableaux simples associent uniquement des positions (mémoire) à une valeur. On accède habituellement dans ce cas, à un élément du tableau par une notation crochet : t[i] désigne le i-ème élément du tableau (i entier).

Le tableau simple est un cas particulier du tableau associatif (où la clé est la position dnas le tableau). Par conséquent PHP autorise bien sûr l'utilisation de tableaux simples.

Enumérations

Un tableau peut servir à énumérer un ensemble fixe d'éléments. Dans ce cas, le tableau PHP est créé avec la primitive array()

   array( [clé =>] valeur , ... )

clé est une chaîne ou un entier, valeur peut être de n'importe quel type.

La clé est optionnelle, si bien qu'on que si l'on ne la précise pas, on obtient un tableau simple. Dans ce cas, une numérotation implicite des éléments de tableau à partir de 0 prend place.

Voici deux exemples de déclaration de tableaux :

$t1 = array( 'version' => 4 , 
             'OS'      => 'Linux',
             'name'    => 'app1');

$t2 = array( 'pierre',
             'jean',
             'max');

Dans la deuxième déclaration, les éléments ont automatiquement un clé qui est le numéro de l'élément. Dans ce cas, t2[1] désigne la chaîne 'jean'. Dans la première déclaration, on peut accéder aux éléments par une notation comme : t1['OS'], qui vaut 'Linux'.

Déclaration et affectation

A l'instar des autres variables, on ne déclare pas les tableaux en PHP. L'interpréteur PHP infère qu'une variable est de type tableau dès que la notation crochets ( [ ] ) est utilisée.

L'affectation se fait directement avec la notation crochets, sans avoir besoin d'allouer explicitement d'espace mémoire pour le stockage :


 $tableau[0]="msg1";

Parcours

Habituellement, dans un langage impératif, le parcours d'un tableau est décrit par une boucle allant du premier indice au dernier indice du tableau. En PHP, on peut aussi utiliser cette construction (on fait appel à la primitive count() qui donne le nombre d'éléments d'un tableau) :

 for ($i=0;$i<count($t2);$i++) {
     echo "$t2[$i]";
 }

Il existe cependant des primitives plus élaborées.

Ces primitives utilisent en interne un pointeur qui indique où en est le parcours du tableau. Ce pointeur est invisible et inaccessible au programmeur. La fonction reset($tableau) permet de remettre le pointeur au début du tableau.

On peut utiliser la fonction each($tableau) qui prend prend l'élément présent à la position courante du pointeur et le renvoie. Le pointeur progresse automatiquement à la prochaine position du tableau.

 reset($t2);
 while ($valeur = each($t2)) {
    echo "Valeur: $valeur";
  }

Attention, si le tableau est associatif (comme $t1), i.e. chaque élément est une paire (clé,valeur), c'est cette paire qui est renvoyée par each(). Pour lister les valeurs uniquement, on peut utiliser list() qui permet de ne sélectionner que certains éléments d'un n-uplet.

 reset($t1);
 while (list(, $valeur) = each($t1)) {
    echo "Valeur: $valeur";
  }

La fonction foreach() est bien adaptée au parcours d'un tableau, quelque soit le type de clé utilisé. On extrait les valeurs associées aux clés directement avec quelquechose comme :

  foreach($t1 as $valeur) {
    echo "Valeur: $valeur";
  }

Tandis qu'on peut accéder à la fois à la clé et à la valeur de la manière suivante :

  foreach($t1 as $cle => $valeur) {
    echo "A $cle est associé $valeur";
  }

Les fonctions

Les fonctions permettent de définir un traitement retournant 0 ou 1 résultat. On donne une fois sa définition, et on peut ensuite appeler cette fonction autant de fois qu'on le désire dans d'autres parties du programme, éventuellement avec des paramètres différents.

Définition d'une fonction

Une fonction est définie par le mot clé function. Le résultat retourné (optionnel) est celui donné par return.

<php?
function prix_reduit( $prix, $reduction ) {
   $res = $prix * (1-$reduc);
   return( $res);
}
?>

Appel d'une fonction

Une fois définie, la fonction peut être appelée, c-a-d exécutée (avec des paramètres réels si la définition attend des paramètres).

<php?
   ...
   $prix_initial=100;
   $reduc=0.20;
   $prix_final1 = prix_reduit( $prix_initial, $reduc );
   $prix_final2 = prix_reduit( 100 , 0.20 );
   ...
?>

Les deux appels à prix_reduit ci-dessus donnent le même résultat.

Exemple de fonction

On se servira avec avantage des fonctions pour éviter les traitements répétitifs. Par exemple, on pourra écrire une fonction qui fait une requête SQL passée en paramètre, et qui accepte un paramètre supplémentaire (debug) quand on veut plus d'information sur les erreurs.

function requete($requet, $debug=0) {
      if($debug==0){
            $query = mysql_query($requet);
            if($query == 0)
                  echo "Problème d\'accès à la base de données ou erreur de syntaxe dans la requête.";
            return $query;
      }
      // mode debug
      else{
            $query = mysql_query($requet);
            echo "$requet";
            if($query == 0) {
                  echo "Problème d\'accès à la base de données ou erreur de syntaxe dans la requête.";
                  echo "Erreur #'. mysql_errno()";
                  echo "Description : ' . mysql_error()";
            }
            else
                  echo "Pas d\'erreur dans la requête.";
            return $query;
      }
}