Chapitre 2
LE LANGAGE PHP
 
 
Précédent Suivant
 

Le langage PHP
Historique
* 1994: création du langage par Rasmus Lerdorf
* Pour sa page personnelle
* PHP = Personal Home Page
* 1997: PHP 3
* PHP est devenu un projet collectif
* PHP = PHP: Hypertext Preprocessor
(Acronyme récursif comme LINUX)
* 2001: PHP 4
* 2004: PHP 5
* Programmation objet
* 2015: PHP 7
* Certaines fonctions deviennent obsolètes
Page statique / page dynamique
* Page HTML = page statique
* Extension ".htm" ou ".html"
* Transmise directement au client
* Code source lisible par le client
* Page PHP = page dynamique
* Extension ".php", ".php3" ou ".php4"
* Conseil: utiliser plutôt l'extension ".php"
* Interprétée par le serveur
* Génère du HTML transmis au client
* Code source non lisible par le client
HTML et PHP
* Code PHP inséré dans code HTML
* Balise de début: <?php
* Balise de fin: ?>
* Exemple très simple
<html>
<head>
<title>Hello World !</title>
</head>
<body>
<?php
echo "Hello World !";
?>
</body>
</html>
Génération de code HTML
* "echo" permet de générer du HTML
* Equivalent de "document.write" en JavaScript
* Côté serveur: code PHP + HTML
<html>
<body>
<?php echo "<b>Hello World !</b>"; ?>
</body>
</html>
* Côté client: code HTML
<html>
<body>
<b>Hello World !</b>
</body>
</html>
Langage PHP
* Syntaxe similaire à Java
* Instructions terminées par ";"
* Commentaires
* "//" pour une seule ligne
* "/*...*/" pour plusieurs lignes
* Opérateurs identiques
* Structures de contrôle identiques
* Sensible à la casse
* Nom des variables précédé d'un "$"
* Variables faiblement typées
* Pas de type prédéfini
* Type peut changer en cours d'exécution
Variables (1/2)
* Déclaration implicite
* $nom_variable = valeur;
* Aucun mot-clé particulier
* Déclarée à la première utilisation
* Portée de la variable limitée au bloc d'instructions
* Bloc d'instructions = zone entre "{" et "}"
* En dehors de tout bloc = variable globale
* Dans le bloc d'une fonction = variable locale
* Pour utiliser une variable globale
* Mot-clé "global"
* global $nom_variable
Variables (2/2)
* Exemple de manipulation de variables
$a = 7;
$b = 3;
function fois2($n) {
$a = 2 * $n;
return $a;
}
echo "Double de ".$b." = ".fois2($b);
echo "Valeur de a = ".$a;
* Résultat de l'exemple
Double de 3 = 6
Valeur de a = 7
* Modification de la fonction
function fois2($n) {
global $a;
$a = 2 * $n;
return $a;
}
* Résultat avec la modification
Double de 3 = 6
Valeur de a = 6
Types de données
* Type déterminé à l'initialisation de la variable
* Booléen
* $x = TRUE;
* $x = FALSE;
* Entier
* $x = 27;
* Flottant
* $x = 27.13;
* Chaîne de caractères
* $x = "Nawouak";
* $x = "27";
* Le type d'une variable peut changer en cours d'exécution
$x = 5;
...
$x = "cinq";
Opérateurs
* Opérateurs classiques
* Arithmétique: +, -, *, /, %
* Affectation: =, +=, -=, *=, /=, %=, --, ++
* Logique: && (ou and), || (ou or), !
* Comparaison: ==, <, >, <=, >=, !=
* Test sur les variables
* isset($var)
* "TRUE" si "$var" existe
* "FALSE" sinon
* empty($var)
* "TRUE" si "$var" n'existe pas ou nulle (zéro, chaîne vide)
* "FALSE" sinon
Structures de contrôle (1/4)
* Bloc d'instructions délimité par "{" et "}"
* Facultatif si une seule ligne
* if ($x == 1) $y = 2; ? if ($x == 1) { $y = 2; }
* Structures conditionnelles
* if (test1) action1
else if (test2) action2
else action3
* switch (variable)
case valeur1: action1
case valeur2: action2
default: action3
* Structures de boucle
* while (test) action
* do action while (test)
* for (depart; test; suivant) action
Structures de contrôle (2/4)
* "une année bissextile est un multiple de 4, mais pas de 100, mais de 400"
* Version 1
if ($annee % 4 != 0) { $bissextile = FALSE; }
else if ($annee % 100 != 0) { $bissextile = TRUE; }
else if ($annee % 400 != 0) { $bissextile = FALSE; }
else { $bissextile = TRUE; }
* Version 2
if ($annee % 4 == 0) {
if ($annee % 100 == 0) {
if ($annee % 400 == 0) { $bissextile = TRUE; }
else { $bissextile = FALSE; }
}
else { $bissextile = TRUE; }
}
else { $bissextile = FALSE; }
Structures de contrôle (3/4)
* Exemple: conversion d'un chiffre en lettres
* Version avec "if" imbriqués
if ($x == 1) $texte = "un";
else if ($x == 2) $texte = "deux";
...
else if ($x == 9) $texte = "neuf";
else $texte = "zéro";
* Version avec "switch"
switch ($x) {
case 1: $texte = "un"; break;
case 2: $texte = "deux"; break;
...
case 9: $texte = "neuf"; break;
default: $texte = "zéro";
}
Structures de contrôle (4/4)
* Exemple: calcul de 9! = 9 x 8 x ... x 2 x 1
* Calcul avec boucle "for"
$f = 1;
for ($i = 2; $i < 10; $i++) { $f *= $i; }
* Calcul avec boucle "while"
$f = 1;
$i = 2;
while ($i < 10) { $f *= $i; $i++; }
* Calcul avec boucle "do...while"
$f = 1;
$i = 2;
do { $f *= $i; $i++; } while ($i < 10);
Chaînes de caractères (1/3)
* Délimiteurs et concaténation
* Variables non évaluées avec "'"
'salut $nom' ==> salut $nom
* Variables évaluées avec """
"salut $nom" ==> salut Bruno
"${formation}2007" ==> mmi2007
* Opérateur de concaténation
"salut ".$nom ==> salut Bruno
* Symbole \
* \$ ==> $
* \\ ==> \
* \" ==> "
* \' ==> '
* \n ==> nouvelle ligne
Chaînes de caractères (2/3)
* Comment mettre un délimiteur dans une chaîne ?
* Problème identique en JavaScript
* Exemple: générer le code HTML d'une image
* Code HTML à générer
* <img src="nawouak.gif"/>
* Nom de l'image dans une variable
* $image = "nawouak.gif";
* Plusieurs possibilités
* Opérateur de concaténation
* echo "...".$image."..."
* Evaluation de "$image" dans chaîne
* echo "...$image..."
* Pas d'équivalent en JavaScript
* Choix du délimiteur "'" ou """
* echo "..." ou echo '...'
* Alternance des délimiteurs "'" et """
* echo "...'...'..."
Chaînes de caractères (3/3)
Tableaux simples (1/2)
* La déclaration du tableau n'est pas nécessaire
* Le remplissage du tableau n'est pas forcément continu
$menu[3] = "CV";
$menu[1] = "Accueil";
$menu[7] = "Photos";
* Les indices sont facultatifs, la numérotation commence à 0
$menu[] = "Accueil";
$menu[] = "CV";
$menu[] = "Photos";
* Déclaration accélérée
* $menu = array("Accueil","CV","Photos");
* Connaître le nombre d'éléments
* $nb = count($menu);
Tableaux simples (2/2)
* Parcours des éléments
* Code PHP
for ($i = 0; $i < count($menu); $i++) {
echo "Rubrique $i: $menu[$i]<br/>";
}
* Code HTML généré
Rubrique 0: Accueil<br/>
Rubrique 1: CV<br/>
Rubrique 2: Photos<br/>
* Uniquement pour un remplissage continu !
Fonctions (1/3)
* Permettent de factoriser / réutiliser du code
* Portions de code associées à un nom
* Reçoivent des arguments (paramètres) en entrée
* Retournent une valeur en sortie
* function nom(arguments) {
action;
return resultat;
}
* Exemple
function calculerAire($l,$h) {
$a = $l * $h;
return $a;
}
Fonctions (2/3)
* Passage d'un argument par valeur
* function f($x)
* L'argument "$x" est une copie
* Modification limitée à "f"
* function calcAire1($l,$h)
{ return ($l * $h); }
* $w = calcAire1($u,$v);
* Passage d'un argument par référence
* function f(&$x)
* L'argument "$x" est un alias
* Modification répercutée hors de "f"
* function calcAire2($l,$h,&$a)
{ $a = $l * $h; }
* calcAire2($u,$v,$w);
* A l'appel, aucune différence
y = f($x);
Fonctions (3/3)
* Possibilité de rassembler des fonctions dans un fichier
* "include" inclut et exécute un fichier
* Alerte en cas d'absence
* "require" inclut et exécute un fichier
* Erreur en cas d'absence
* Exemple
* Fichier "fonctions.php" contenant une fonction
<?php
...
function calculerAire($l,$h) { return ($l * $h); }
...
?>
* Utilisation du fichier et de la fonction
<?php
include("fonctions.php");
...
echo "Aire = ".calculerAire(5,13);
...
?>
Tableaux associatifs (1/3)
* Tableaux indexés par des chaînes
* Association d'une clé (chaîne) à un élément
* Tableau simple: association entier-élément
* Initialisation d'un tableau
* $menu["home"] = "Accueil";
$menu["cv"] = "CV";
$menu["photos"] = "Photos";
* $menu = array(
"home" => "Accueil",
"cv" => "CV",
"photos" => "Photos");
Tableaux associatifs (2/3)
* Parcours des éléments
* Code PHP
foreach ($menu as $element) {
echo "Rubrique \"$element\"<br/>";
}
* Code HTML généré
Rubrique "Accueil"<br/>
Rubrique "CV"<br/>
Rubrique "Photos"<br/>
* Fonctionne aussi pour des tableaux simples !
Tableaux associatifs (3/3)
* Parcours des couples clé-élément
* Code PHP
foreach ($menu as $cle => $element) {
echo "Rubrique <a href='$cle.htm'>";
echo "$element</a><br/>";
}
* Code HTML généré
Rubrique <a href='home.htm'>Accueil</a><br/>
Rubrique <a href='cv.htm'>CV</a><br/>
Rubrique <a href='photos.htm'>Photos</a><br/>