Un rapide survol de PHP

Joël Brogniart

Première publication jeudi 22 novembre 2000

Dernière modification jeudi 21 juin 2001 à 8:54.


Au programme


Introduction

Ce petit survol est destiné à faire une présentation rapide du langage PHP. Il est destiné à des personnes ayant déjà quelques connaissances en programmation et connaissant le web et HTML. <mode-gymnastique>En même temps ce survol se veut lisible par des non informaticiens</mode-gymnastique>. Ce n'est ni un cours de programmation ni un manuel. Donc vous ne pourrez y trouver la description de toutes les fonctionnalités de PHP ni de sa syntaxe complète. Son objectif est simplement de donner une petite idée du fonctionnement et des utilisations possibles de PHP. Aussi certaines informations seront données de manière simplifiées voire approximatives et je demande l'indulgence du lecteur. Par contre j'accueille avec plaisir les remarques, les corrections et les demandes d'améliorations de votre part.

Qu’est-ce que PHP ?

Tout d’abord c’est un language informatique. Plus précisément c'est un langage de script qui est géré côté serveur (server side scripting language). On oppose généralement les langages de programmation système (C, Pascal, Lisp...) aux langages de script (AppleScript, shell Unix, Tcl...). Les langages de programmation système sont conçus pour réaliser des applications indépendantes et les langages de script utilisent les services d’autres applications pour certains services. On peut aussi classer les langages utilisés pour des applications clients/serveur en langages qui fonctionnent du côté du client (client side) comme Javascript et en langages qui fonctionnent du côté du serveur (perl...).

C’est un language qui a été créé et qui évolue dans la mouvance des logiciels libres (Open source). Il est librement téléchargeable, fourni avec les sources, librement modifiable et librement rediffusable à condition de respecter une licence peu restrictive.

Il fonctionne sous différentes incarnations de Linux, Unix et Windows.

Il fonctionne en lien avec un serveur HTTP, plus particulièrement avec Apache (le logiciel serveur HTTP le plus courant actuellement).

Il possède des fonctions d’interfaçage avec beaucoup de moteurs de bases de données (MySQL, PostgreSQL, Oracle, Informix...).

La syntaxe du langage est simple ce qui permet de l’utiliser sans avoir à faire une école d’ingénieurs.

Ce langage peut être incorporé dans du HTML pour créer des pages HTML dynamiques. Pour toutes ces raisons PHP connait une croissance importante ces derniers temps.

Le fonctionnement

PHP est un interpréteur qui est utilisé en complément avec un serveur HTTP, en général Apache. Je ne rentrerais pas dans le détail de l’installation et la configuration des différents outils et ne donnerai que des exemples mettant en œuvre PHP et Apache.

Quand un client demande une page PHP, Apache fait suivre la demande à PHP qui interprête le code de la page et renvoie le résultat au client.

Syntaxe

Voici un exemple de code permettant de faire un tour rapide de la syntaxe de PHP :

<html>
  <head>
  <title>Syntaxe PHP</title>
  </head>

  <body>
    <h1>Syntaxe PHP</h1>
    <?php
      $salutation = "Un grand bonjour de la part de PHP."; // bonjour
      $tagged_salutation = "<p>".$salutation."</p>\n";
    ?>
    <h2>Affichage de texte</h2>
    <?php
      /*
        Maintenant il faut afficher le texte.
         J'utilise la fonction print().
      */
     print($tagged_salutation);
   ?>
  </body>
</html>

Le résultat de ce code est accessible sur la page <syntaxe_ex.php>.

Tout d’abord on peut voir que le code PHP doit être encadré par les balises "<?php" et "?>". De plus le HTML et le code PHP peuvent être enchevêtrés.

Chaque instruction est terminée par un point-virgule ";".

On peut ajouter des commentaires soit avec "//" qui indique que tout le texte qui suit, jusqu'à la fin de la ligne est un commentaire, soit en encadrant les commentaires par "/*" et "*/".

Les variables

Encore un petit bout de code pour montrer les variables et les différents types de base en PHP.

<?php
  $var = 12345;  // un entier
  print("<p>\$var = $var</p>\n");

  $var =  1.2345 * $var;  // un reel
  print("<p>\$var = $var</p>\n");

  $var =  "Il y a " . $var . " &eacute;l&eacute;ments dans la bo&icirc;te.";  // une chaine de caractere
  print("<p>\$var = $var</p>\n");

  $var = array(
    array( 1, "a", "1a"),
    array( 2, "b", "2b"),
    array( 3, "c", "3c") ); // un tableau
  print("<p>\$var = <p>\n");
  print("<table>\n");
  print("<tr><td>" . $var[0][0] . "</td><td>" . $var[0][1] . "</td><td>" . $var[0][2] . "</td></tr>\n");
  print("<tr><td>" . $var[1][0] . "</td><td>" . $var[1][1] . "</td><td>" . $var[1][2] . "</td></tr>\n");
  print("<tr><td>" . $var[2][0] . "</td><td>" . $var[2][1] . "</td><td>" . $var[2][2] . "</td></tr>\n");
  print("</table>\n");

  class Var_class {
    var $item;
    function set_item($value) {
      $this->item = $value;
    }
    function print_html() {
      print("<p>\$item = $this->item</p>\n");
    }
   
  }
   $var = new Var_class // un objet;
   $var->set_item("123");
   $var->print_html();
?>

Le résultat de ce code devrait être visible en accédant à la page <variable_ex.php>.

Le nom des variables en PHP commence par $ (dollar) suivi d'une lettre ou du caractère de soulignement suivit éventuellement de n'importe quelle séquence de caractères parmi les lettres, les chiffres ou le caractère de soulignement. Donc pas de ponctuation dans les noms de variable. Le nom des variables est sensible à la case, ainsi $var et $vaR sont deux variables différentes.

Les types supportés par PHP sont : entier, réel en virgule flottante, chaine de caractères, tableau et objet. Les tableaux peuvent être utilisés comme des tableaux indexés classiques (on dit tableaux scalaires ou vecteurs) où les éléments sont rangés par ordre numérique. Ils peuvent être aussi utilisés en tant que tableaux associatifs, c'est à dire que l'index permettant d'accéder à un élément n'est pas forcément un entier mais peut par exemple être un chaîne de caractères. Les fonctionnalités objets sont relativement sommaires par rapport à celle de langages comme C++, Objective C ou Java mais sont quand même utilisables.

Le type d'une variable n'est pas préétabli et varie en fonction de son utilisation, ceci est géré par l'interpréteur (mais il existe des possibilité de "forcer" une variable à être d'un type particulier).

Opérateurs

Je ne vais pas rentrer dans le détail des opérateurs de PHP. PHP possède la plupart des opérateurs classiques : affectation (= += -= *= /= .=), arithmétiques (+ - * / %), binaires (& | ^ ~ << >>), logiques (and or xor !), comparaison (== != > >= < <=). Voici quelques opérateurs supplémentaires.

L'opérateur de concaténation de chaînes . (point)
Le résultat de $var_a . $var_b est la mise bout à bout des chaines $var_a et $var_b.
L'opérateur conditionnel trinaire ? :
Le résultat de l'expression expr1 ? expr2 : expr 3 est expr2 si expr1 est vrai et expr3 sinon.
L'opérateur de comparaison === (gloups, ça n'existe qu'à partir de PHP 4)
Le résultat de $var_a === $var_b est vrai si $var_a et $var_b sont égaux et sont du même type
Les opérateurs de pré ou post incrémentation (++) et de pré ou post décrémentation (--)
Ces opérateurs ajoutent ou soustraient 1 à la variable. ++$var ajoute 1 à $var et retourne $var, $var++ retourne $var et ajoute 1 à $var.

Un petit bout de code pour illustrer tout ça.

<?php
  // concatenation
  $chaine_a = "Bonjour";
  $chaine_b = "gentil";
  $chaine_c = "utilisateur";
  $reponse = $chaine_a . " " . $chaine_b . " " . $chaine_c . ".";
  print("<p>Concatenation<br>\n");
  print("$reponse</p>\n");
  
  //conditionnel ternaire
  $n1 = 1; $c2 = 2; $e2 = "expression 2"; $e3 = "expression 3";
  $t1 = ($n1 > $n2) ? $e2 : $e3;
  $t2 = ($n1 < $n2) ? $e2 : $e3;
  print("<p>conditionnel ternaire<br>\n");
  print("(\$n1 &gt; \$n2) ? \$e2 : \$e3 donne $t1<br>\n");
  print("(\$n1 &lt; \$n2) ? \$e2 : \$e3 donne $t2</p>\n");
  
  // pre incrementation
  $n = 123;
  print("<p>pre incrementation<br>\n");
  print("\$n = $n");
  print(" puis ++\$n = " . ++$n);
  print(" et enfin \$n = $n</p>\n");

  // post incrementation
  $n = 123;
  print("<p>post incrementation<br>\n");
  print("\$n = $n");
  print(" puis \$n++ = " . $n++);
  print(" et enfin \$n = $n</p>\n");
?>

Le résultat du code peut être vu sur la page <operateur_ex.php>.

Structures de contrôle

Les structures de contrôle sont les intructions qui permettent de passer d'une partie du code à une autre en fonction de certaines conditions ou de répéter certaines parties de code.

Les tests

Les tests permettent d'exécuter ou non une portion de code si certaines conditions sont réunies. La structure if... elseif...else est la structre de test générale. PHP dispose aussi d'une structure plus limitée permettant de comparer le résultat d'une expression à plusieurs valeurs et d'associer des instructions pour chacune de ces valeurs : switch... case...case... default... Voici un exemple de code pour ces deux structures.

<?php

  // if elseif else
  $var = 4;
  print("<h3>If... elseif... else...</h3>\n");
  if($var < 4) {
    print("<p>\$var est inferieur a 4<p>\n");
  } elseif($var == 4) {
    print("<p>\$var est egal a 4<p>\n");
  } else {
    print("<p>\$var est superieur a 4<p>\n");
  }
  
  //switch
  print("<h3>switch... case... default...</h3>\n");
  switch($var) {
    case 1:
      print("<p>\$var est egal a 1<p>\n");
      break;
    case 2:
       print("<p>\$var est egal a 2<p>\n");
      break;
    case 3:
      print("<p>\$var est egal a 3<p>\n");
      break;
    case 4:
      print("<p>\$var est egal a 4<p>\n");
      break;
    default:
      print("<p>\$var est different de 1, 2, 3 et 4<p>\n");
  }
?>

Le résultat de ce code peut être vu sur la page <structure_controle_test_ex.php>.

Les boucles

Les boucles permettent de répéter une partie de code plusieurs fois. Avec la boucle while... tant qu'une condition est vraie les instructions sont répétées (la condition est vérifiée avant la première exécution des instructions et les instructions peuvent ne jamais être exécutées). La boucle do... while... permet aussi la répétition des instructions tant qu'une condition est vraie sauf que la condition est vérifiée après l'exécution des instructions, donc les instructions sont exécutées au moins une fois. La boucle for... permet de répéter les instructions en indiquant une instruction initiale, une instruction à réaliser à chaque itération et la condition permettant de répéter les instructions de la boucle à nouveau.

<?php

  //while...
  print("<h3>Boucle while...</h3>\n");
  $var = 4;
  while($var > 0) {
    print("<p>$var est supérieur a 0<p>\n");
    $var--;
  }

  //do... while...  
  print("<h3>Boucle do... while...</h3>\n");
  $var = 4;
  do{
    print("<p>$var est supérieur a 0<p>\n");
    $var--;
  } while($var > 0);
  
  //for..
  print("<h3>Boucle for...</h3>\n");
  for($var = 4; $var > 0; $var--) {
    print("<p>$var est supérieur a 0<p>\n");
   }
?>

Le résultat de ce code peut être vu sur la page <structure_controle_boucl_ex.php>.

blabla (break continue)

Quelques fonctions

echo

print

die

blabla (pour appâter indiquer les familles de fonctions intégrées à PHP : numériques, dates, chaînes, tableau, fichiers et répertoires, graphiques -création de gif au vol, pdf - création de pdf au vol, xml, manipulation de base de données, http, apache, dns, imap, ldap, smtp...).

Créer ses propres fonctions

blabla (definition de la fonction, utilisation, arguments)

blabla (arguments passés par valeur, par réf, valeurs défaut)

blabla (resultat des fn)

Les choses intéressantes et rigolotes

Gestion des formulaires

blabla (les vars du post/gest comme var php)

Code de la page de formulaire

<html>
  <head>
    <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
    <title>Formulaire</title>
  </head>
  <body>
    <h1>Formulaire</h1>
    <form name="saisie" method="post" action="traitement_ex.php">
      <p>Veuillez saisir les informations suivantes :	</p>
      <p>Pr&eacute;nom : <input type="text" name="prenom"></p>
      <p>Nom : <input type="text" name="nom"></p>
      <p>Courriel : <input type="text" name="courriel"></p>
      <p><input type="submit" name="envoi" value="Envoyer"></p>
    </form>
  </body>
</html>

Code de la page de traitement

<html>
  <head>
    <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
    <title>Traitement</title>
  </head>
  <body>
    <h1>Traitement</h1>
    <p>Quelqu'un a saisi les informations suivantes:</p>
    <p>Pr&eacute;nom : <?php  print("$prenom"); ?></p>
    <p>Nom : <?php  print("$nom"); ?></p>
    <p>Courriel : <?php  print("$courriel"); ?></p>
  </body>
</html>

Le résultat de ce formulaire et de son traitement peuvent être vu sur la page <formulaire_ex.html>.

blabla (page html multiforme avec test var submit)

<?php
  if(!$envoi) { ?>
    <html>
      <head>
        <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
        <title>Formulaire</title>
      </head>
      <body>
        <h1>Formulaire</h1>
       <form name="saisie" method="post" action="formulaire_traitement_ex.php">
          <p>Veuillez saisir les informations suivantes :	</p>
          <p>Pr&eacute;nom : <input type="text" name="prenom"></p>
          <p>Nom : <input type="text" name="nom"></p>
          <p>Courriel : <input type="text" name="courriel"></p>
          <p><input type="submit" name="envoi" value="Envoyer"></p>
        </form>
      </body>
    </html>
<?php  } else { ?>
  <html>
    <head>
      <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
      <title>Traitement</title>
    </head>
    <body>
      <h1>Traitement</h1>
      <p>Quelqu'un a saisi les informations suivantes:</p>
      <p>Pr&eacute;nom : <?php  print("$prenom"); ?></p>
      <p>Nom : <?php  print("$nom"); ?></p>
      <p>Courriel : <?php  print("$courriel"); ?></p>
    </body>
  </html>
<?php } ?>

Le résultat de ce formulaire et de son traitement peuvent être vu sur la page <formulaire_traitement_ex.php>.

Les tableaux

blabla : array(), sizeof(), foreach($tab as $elem){}(PHP4), arraywalk()

L'incorporation de fichiers de code

blabla (include, require)

Bouts de code

Sur la page test_php il y a quelques bouts de code PHP totalement inutiles mais donc je me suis servi pour tester la manière de fonctionner de PHP.

Sites

http://www.php.net

http://www.devshed.com

http://www.techmag.net/cestquoi.php3

http://www.commentcamarche.net

http://www.siteck.com/php.html

http://www.phpinfo.net

http://phpfacile.free.fr

Bibliographie

Stig Sæther Bakken, Alexander Aulbach, Egon Schmid, Jim Winstead, Lars Torben Wilson, Rasmus Lerdorf, Zeev Suraski, Andrei Zmievski, PHP Manual, the PHP Documentation Group, 2000, <http://www.php.net/manual/>.

Israel Denis Jr, The Soothingly Seamless Setup of Apache, SSL, MySQL, and PHP, revised by Eugene Otto, 7 juin 2000, <http://www.devshed.com/Server_Side/PHP/SoothinglySeamless/>.

Stephen Spainhour, Robert Eckstein, Webmaster in a Nutshell - Manuel de référence, O'Reilly, Paris, 2000, ISBN 2-84177-087-7.

Vikram Vaswani, Harish Kamath, PHP 101 (Part 1) - Secret Agent Man, 31 juillet 2000, <http://www.devshed.com/Server_Side/PHP/PHP101_1/>.

Vikram Vaswani, Harish Kamath, PHP 101 (Part 2) - Shakespeare's Rose, 8 août 2000, <http://www.devshed.com/Server_Side/PHP/PHP101_2/>.

Vikram Vaswani, Harish Kamath, PHP 101 (part 3) - Chocolate Fudge And Time Machines, 15 août 2000, <http://www.devshed.com/Server_Side/PHP/PHP101_3/>.

Vikram Vaswani, Harish Kamath, PHP 101 (part 4) - Look, Ma...It's Alive!, 1 septembre 2000, <http://www.devshed.com/Server_Side/PHP/PHP101_4/>.

Vikram Vaswani, Harish Kamath, PHP 101 (part 5) - The Wonderland Factor, 6 septembre 2000, <http://www.devshed.com/Server_Side/PHP/PHP101_5/>.

Nathan Wallace, PHP: Hackers Paradise, 1 mars 2000, <http://www.e-gineer.com/articles/php-hackers-paradise.phtml>.

Nathan Wallace, Design Patterns in Web Programming, 8 mars 2000, <http://www.e-gineer.com/articles/design-patterns-in-web-programming.phtml>.