logo Pierre AULAS
Cours de PhP
 Parcours  |   Réalisations  |   Cours  |   Chroniques  |   Divers
Généralités
Types
Expressions
Opérateurs
Structures de contrôle
Fonctions
Objets (php4)
Exercices

Les bases de php

Le but de ce chapitre est de vous servir de récapitulatif plus que de tutoriel. La syntaxe de PHP, simple, est proche du C. Vous devez la connaître parfaitement pour vous consacrer ensuite à l'essentiel.

Les termes importants ont été mis en italique.

Si vous désirez des précisions sur un point, vous pouvez consulter le site suivant:
 - http://www.php.net/manual/fr/ (manuel PHP de la communauté php française)

Haut de page

1. Généralités

Tout code PHP doit être inclus entre les balises <?php et ?>. Des balises courtes existent comme <? ?>.

Le séparateur d'instruction est le ";", comme en C. Son oubli à la fin d'une ligne est la première cause d'erreur quand on débute.

Commentaires

Il existe trois types de commentaires en PHP:
 - /* Le commentaire sur plusieurs lignes comme en C.*/
 - // Le commentaire sur une seule ligne.
 - # Le commentaire sur une seule ligne.

On peut mixer les styles de commentaires dans un même script.

//C'est tellement plus simple sur une seule ligne

/************************************************
/*ou tellement plus joli avec des petites étoiles
/***********************************************/

//_____________________Y'en a pour tous les goûts

Variables et littéraux

Les variables sont des symboles qui permettent de référencer des valeurs. Comme leur nom l'indique, elles peuvent référencer des valeurs qui varient au cour d'un script ce qui les distinguent des littéraux (0, 3.14116, "toto") qui représentent directement une valeur immuable.

Un nom de variable commence par un $ suivi d'au moins un caractére non numérique (le " _ " est admis) puis de n'importe quel caratère alphanumérique. Notez que PHP prend en compte la casse.

Exercice 1

Types

Le type de la valeur associé à une variable peut changer contrairement au langage C. Dans un script une variable peut référencer un entier, une chaine, un booléen, etc. L'interpréteur se charge de gérer l'espace mémoire nécessaire et vous facilite la vie.

Déclaration

Il n'y a pas de déclaration en PHP. L'interpréteur se charge de créer une variable dès qu'un nouveau symbole précédé de " $ " apparaît dans le script.
Quand on utilise la valeur d'une variable qui n'a pas été définie, PHP donne comme valeur initiale une chaîne vide ou 0, selon le contexte.

print "$maVariableVide";
//Renvoi une chaine vide

Pour éviter ce genre d'erreur, vous pouvez effectuer les tests en mode erreur error_reporting (E_ALL); pour supprimer la tolérance sur les déclarations ou utiliser la fonction isset() pour savoir si la variable a déjà été définie ou non.

Constantes

Une constante est un symbole associé à une valeur mais contrairement aux variables ce symbole ne peut pas être modifié. Une constante fonctionne comme un littéral mais désigné de manière symbolique ce qui améliore la lisibilité du code
Les constantes sont définies par la fonction define().

define ("NOM", "Toto");
define ("MDP", "supermotdepasse");
Haut de page

2. Types

PHP distingue les types scalaires (entiers, flottants, chaînes, booléens) et les types agrégats (tableaux et objets). Les valeurs des types scalaires ne peuvent pas se décomposer (quoiqu'une chaîne soit en réalité un tableau) contrairement à celles des types agrégats.

Exercice 4

Types numériques et booléens

Les types numériques comprennent les entiers et les flottants, ces derniers ayant une partie décimale séparée de la partie entière par un "."(attention: pas une virgule, un point).

Différentes écritures permettent de préciser en quelle base sont les nombres ou d'utiliser un exposant pour la notation scientifique.

$i = 1;      //Entier
$i = 011;    //Octal
$i = 0x11;   //Hexadécimal
$f = 3.14;   //Flottant
$f = 1000e-3;//Exponentiel

PHP n'a pas de "vrai" booléen. C'est comme en C: la valeur faux est le 0, la chaîne vide ou la chaîne "0". Tout autre valeur est vrai. Les valeurs true et false existent néanmoins et peuvent être utilisée.

Chaînes de caractères

Les chaînes de caractère peuvent être encadrées par des 'guillemets simples' ou par des "guillemets doubles". Celles avec des guillemets simples peuvent contenir celles avec des guillemets double et réciproquement.
Par convention et pour faciliter la distinction entre SQL et Php, nous réserverons les guillemets simples au premier et les doubles au second autant que faire ce peut.
Les guillemets doubles peuvent inclure des noms de variables qui seront remplacées par leur valeur à l'exécution.

$nom = "Paul";
print "Bonjour $nom";
//Renvoi "Bonjour Paul"

On peut également utiliser les caractères d'échappements suivant (les mêmes qu'en C):

Tableau des principaux caractères d'échappement
Caractères  Description
\n  Saut de ligne
\r  Retour chariot
\t  Tabulation
\\  Le signe \
\$  Le signe $
\"  Le signe "
print "print \"\$res = 4/2\";"
//Renvoi print "$res=4/2";

Attention: ces caractères d'échappement (notamment les retours chariot et les tabulations) s'appliquent au code php et non à la page html. Il permet de mettre en ordre le code source de vos pages html, pas la présentation de vos pages.

Exercice 5

Tableaux

Un tableau est une suite de valeurs référencées par une unique variable. Php gére dynamiquement la taille de ces tableaux ce qui permet de leur ajouter ou retirer des valeurs sans se poser de question.
Les tableaux peuvent être soit indicés (les valeurs sont référencées par leur position en commençant par 0), soit associatifs auxquel cas les valeurs sont référencées par des clefs attribuées explicitement.

Tableaux indicés

Quelques exemples de tableaux indicés:

$tab [0] = "toto";
$tab [1] = "2";
$tab [3] = 3.14;

Un tableau peut recevoir des types de données différents et ne doit pas forcèment être rempli dans l'ordre des indices.
Php permet ainsi de remplir un tableau sans préciser l'indice. Dans ce cas celui-ci est le numéro de la première cellule vide après l'indice le plus élevé.

$tab [] = "martin"; //$tab[4] si je poursuis l'exemple précédent
$tab [] = "boum";   //$tab[5]
$tab [] = 123;      //$tab[6]

L'instruction array offre un autre moyen d'initialiser un tableau. Là encore, Php indice, à partir de 0, les éléments dans l'ordre où ils apparaîssent.

$tab = array ("toto", "2", 3.14);
//Contrairement au premier exemple ici $tab[2]=3.14 puisque l'indexation commence à partir de 0.

Tableaux associatifs

Un tableau associatif désigne chaque élément qu'il contient par une clef qui porte un nom unique, ce qui permet d'accéder à chaque élément via sa clef.
En ce sens, un tableau indicé est un cas particulier de tableau associatif où les clefs sont des entiers.

Pour affecter à chaque case du tableau une valeur référencée par une clef, on procède de la manière suivante:

$tabAss ["Nom"] = "Toto";
$tabAss ["Prenom"] = "Patacrepe";
$tabAss ["Age"] = 8;

Ici la valeur Toto est placée dans la case Nom du tableau associatif $tabAss.
Patacrepe est placé dans la case Prenom et 8 dans la case Age.

On peut également utiliser array pour initialiser un tableau associatif mais la syntaxe est un peu plus complexe.

$tabAss = array ("Nom" => "Toto", "Prenom" => "Patacrepe", "Age" => 8);

La fléche "=>" indique l'association entre une clef et une valeur selon le schéma clef => valeur.

Il est possible d'accéder facilement à un élément du tableau via sa clef. $tabAss["Nom"] renverra "Toto".
Le plus simple pour parcourir un tableau associatif est d'utiliser la fonction foreach (mais foreach fonctionne aussi avec les tableaux indicés).

foreach ($tabAss as $clef => $valeur)
{
 print "A la clef $clef est associée";
 print " la valeur $valeur.</br>";
}

On peut également parcourir un tableau associatif à l'aide d'un curseur.
Les fonctions next() et prev() permettent de déplacer ce curseur, initialement positionné sur le premier élément du tableau. Les fonctions key() et current() renvoient respectivement la clef et la valeur de l'élément courant.
Pour mémoire, les fonctions reset() et end() positionnent le curseur respectivement sur le premier et le dernier élément du tableau.

Vous pourriez parcourir un tableau de la manière suivante:

do {
 print "A la clef ".key($tabAss)." est associée";
 print "la valeur ".current($tabAss).".</br>";
}
while (next($tabAss));

Php fournit beaucoup d'autres fonctions: count() renvoie le nombre d'éléments d'un tableau, min() et max() les valeurs extrêmes d'un tableau.
Les fonctions sort(), rsort() (ordre inverse) permettent d'effectuer des tris sur des tableaux indicés, asort() (tri sur les valeurs), arsort() (tri inverse sur les valeurs), ksort() (tri sur les clefs) sur des tableaux associatifs.

Tableaux multi-dimensionnels

Les principes des tableaux indicés et associatifs se généralisent aux tableaux multidimensionnels au sein desquels il est possible de les combiner comme dans l'exemple suivant :

$tab = array (
array ("Nom"=>"Toto", "Prenom"=>"Patacrepe"),
array ("Nom"=>"Milou", "Prenom"=>"le chien")
);

print $tab [1] ["Prenom"];
//Renvoi "le chien"

Exercice 6

Conversion et typage

Php détermine le type d'une variable en fonction du contexte dans lequel elle est utilisée. Si vous utilisez une chaîne de caractère dans une soustraction par exemple, Php va essayer d'en extraire un numérique :

$sous = "2 grands-mères" - 1;

$sous contient 1 puisque la chaîne "2 grands-mères" est convertie en 2. Mais le résultat de ces conversions automatiques étant très improbable, il est bon de typer ou de vérifier le type des données lorsque vous avez un doute.

Typage

Vous pouvez tester le type d'une variable à l'aide des fonctions is_long() (pour un entier), is_double() (pour un décimal), is_string(), is_array(), is_object(). Ce sont des fonctions booléennes qui renvoient true ou false.

Vous pouvez également utiliser la fonction gettype() qui renvoie "integer", "double", "string", "boolean", "array" ou "object".

Conversion (appelée aussi transtypage)

On peut convertir le type d'une valeur contenue dans une variable à l'aide de la fonction settype ($var, "integer|boolean|etc").

$var = "3 grands méchants loups";
$varConv = (integer) $var;
//$varConv vaut 3
$varConv = (boolean) $var;
//$varConv vaut 1

Il est également possible d'utiliser la syntaxe suivante :

$var = "3 grands méchants loups";
$varConv = (integer) $var;
//$varConv vaut 3
$varConv = (boolean) $var;
//$varConv vaut 1

Exercice 7

Haut de page

3. Expressions

On désigne par expression toute construction du langage qui produit une valeur. Les variables, littéraux et constantes sont déjà des expressions: elles produisent leur propre valeur.

Le code ci-dessous contient trois expressions. La première instruction, 5, a pour valeur 5. L'affectation qui suit se base sur le fait que la syntaxe "5" produit la valeur 5 et donc affecte à la variable $i cette même valeur. Enfin la dernière instruction produit elle aussi "5", qui est la valeur de la variable.

5;
$i = 5;
$i;
Haut de page

3.1 Opérateurs

Après les variables et les littéraux, les opérateurs sont le moyen le plus courant de créer des expressions. Un opérateur produit une valeur par manipulation de valeurs fournies par d'autres expressions.

Opérateurs arithmétiques

Les opérateurs les plus connus sont les opérateurs arithmétiques.
Ces opérateurs peuvent être composés pour former des expressions complexes où se pose généralement la question de l'ordre de précédence des opérateurs. Tout langage définit un ordre de précédence mais il est toujours préférable de mettre des parenthèses afin de déterminer sans hésitation l'ordre d'exécution.

print 3 * 6 - 2 / 4; //Renvoi ... 17.5 (mais on se demande parfois comment)
print (3 * 6) - (2 / 4); //Renvoi 17.5!
Tableau des opérateurs arithmétiques
Opérateur  Description
$a + $b  Addiction de $a et $b
$a - $b  Soustraction de $a et $b
$a * $b  Multiplication de $a et $b
$a / $b  Division de $a et $b
$a % $b  Reste (modulo) de la division de $a par $b

Concaténation de chaine

Un opérateur très fréquement utilisé est la concaténation de chaîne, simplement représenté par le point ".".

Cet opérateur permet tout simplement de mettre des chaînes bout à bout comme le montre l'exemple qui suit:

$a = "Bonjour";
$b = "Toto";
print $a." ".$b; //Peut aussi s'écrire print "$a $ab";
//Renvoi "Bonjour Toto"

Opérateur d'affectation

L'opérateur d'affectation "=" est couramment utilisé pour stocker dans une variable le résultat d'un calcul ou d'une manipultion de chaîne.

$a = "Bonjour";
$a = $a." Toto";

nb: prenez l'habitude de bien distinguer l'opérateur d'affectation "=" de l'opérateur de comparaison "==". C'est une erreur classique et problématique quelque soit le langage.

Il existe une syntaxe plus économique pour exprimer ce type d'opération :

$a = "Bonjour";
$a .= " Toto";
//Désormais $a contient "Bonjour Toto"

Cette notation peut être utilisée avec tous les opérateurs arithmétiques et l'opérateur de concaténation.

Incrémentation

Une technique couramment utilisée est l'incrémentation d'un compteur. On pourrait écrire $i = $i + 1 pour incrémenter le compteur $i de 1. Php reprend du C une syntaxe plus compacte: ++$i pour la pré-incrémentation et $i++ pour la post-incrémentation. Les mêmes expressions existent avec l'opérateur de soustraction.

Prenez la peine de bien comprendre l'exemple suivant afin de distinguer la pré-incrémentation de la post-incrémentation.

$i = 2;//$i vaut 2
$i++;//$i vaut 3

Dans le cas de la pré-incrémentation, l'incrémentation se fait avant l'exécution de l'instruction :

$j = ++$i;//$i vaut 4, $j vaut 4

Dans le cas de la post-incrémentation, l'instruction est exécutée, à la suite de quoi le compteur est incrémenté :

$k = $i++;//$k vaut 4 (l'instruction d'affectation s'exécute avant l'incrémentation)
          //$i vaut 5
--$k;//$k vaut 3

Exercice 8

Opérateurs logiques

Pour mémoire, une valeur est interprétée comme vraie si elle différente de 0 ou d'une chaîne vide, et fausse sinon.

Tableau des opérateurs logiques
Opérateur  Description
$a && $b  Renvoi vrai si $a ET $b sont vrais
$a and $b  id. que &&
$a || $b  Renvoi vrai si $a OU $b sont vrais
$a or $b  id. que ||
$a xor $b  Renvoi vrai si soit$a, soit $b est vrai
!$a  Renvoi la négation de $a

Attention: l'opérateur de comparaison s'écrit, comme en C, avec deux "==". Il est courant d'oublier le second "=", erreur que l'interpréteur ne démasque pas puisque l'opérateur d'affectation renvoie une valeur qui peut être interpretée comme un booléen.

$i = 1;
$j = 2;
if ($i == $j) ... //Renvoie FALSE
if ($i = $j) ... //Renvoie TRUE et en plus $i contient désormais 2
Haut de page

3.2 Structures de contrôle

Il y a deux types de contrôles: les tests et les boucles. Les tests vérifient quelle partie du script doit être effectué, les boucles combien de fois.

Tableau des opérateurs de comparaison
Opérateur  Description
$a == $b  Vrai si $a est égal à $b
$a != $b  Vrai si $a est différent de $b
$a < $b  Vrai si $a est inférieur à $b
$a > $b  Vrai si $a est supérieur à $b
$a <= $b  Vrai si $a est inférieur ou égal à $b
$a >= $b  Vrai si $a est supérieur ou égal à $b

Exercice 9

Tests

Jusqu'à présent nous avons vu des instructions, chacune séparée par un ";". Php, de la même manière que le C, définit les parties constituant un programme a un niveau plus élevé sous forme de bloc, délimités par des accolades "{ }".

if ... else

if (expression1)
{
 //A faire si expression1 est VRAI
}
elseif (expression2)
{
 //A faire si expression1 est FAUSSE et 2 est VRAI
}
else
{
 //A faire si expression1 et 2 sont FAUX
}

Une syntaxe raccourcie existe pour if ... else lorsque le bloc qui suit ne contient qu'une seule instruction.

if (expression) instruction unique;
 ou
if (expression)
 instruction unique;

L'opérateur ternaire

Lorsque votre test ne débouche que sur deux instructions uniques, Php vous fournit l'opérateur ternaire suivant :

(expression) ? à_faire_si_expression_vrai : à_faire_si_expression_faux ;

switch

switch (expression)
{
 case valeur1 :
  //A faire si expression vaut valeur1
  break; //Pour sortir du switch
 case valeur2 :
  //A faire si expression vaut valeur2
  break; //Pour sortir du switch
 . . .
 default:
  //Si expression ne vaut aucune des valeurs testées
  break;
}

Attention: si expression est égal à valeur, alors toutes les instructions qui suivent sont exécutées jusqu'à la fin indépendament des case. L'instruction break permet de mettre fin à l'exécution du bloc lorsqu'une valeur a été trouvée.

Exercice 10

Les boucles

On retrouve les mêmes constructions qu'en C, avec foreach en plus, déjà vu dans le chapitre consacré aux tableaux associatifs.

while

while (expression)
{
 //A faire si expression est VRAI
 //! Si vous ne modifiez pas la valeur de
 //expression, votre boucle tourne à l'infini
}

do ... while

do
{
 //A faire une première fois indépendament d'expression
}
while (expression);

N'oubliez pas le " ; " après while.

for

for (initialisation; condition; incrementation)
{
 //Opération à effectuer
}

Dans le cas où la boucle for ne comporte qu'une seule instruction, la notation suivante existe :

for (initialisation; condition; incrementation, instruction);

Exercice 11

break et continue

break permet de forcer la sortie d'une boucle.

continue dirige l'exécution à la prochaine évaluation du test de continuation, en sautant les instructions qui restaient à exécuter dans le corps de la boucle.

Haut de page

4. Fonctions

Les fonctions doivent être définies avant leur appel. Le nom d'une fonction ne doit pas commencer par " $ " et n'est pas sensible à la casse.
Une fonction peut renvoyer une valeur avec l'instruction return. Elle ne peut renvoyer qu'une seule valeur, qui peut être un tableau.
La syntaxe de définition est la suivante:

function nomFonction([$arg1, $arg2, $arg3, ...])
{
 //Contenu de la fonction
 return $valeur;
}

Passage des arguments

Les arguments sont passés par valeur, ce qui veut dire qu'une copie des variables est faite au moment de l'appel de la fonction et que les éventuelles modifications faites dans le corps de la fonction sur les arguments n'ont qu'un effet local.

function addition ($i, $j)
{
 $resultat = $i + $j;
 return $resultat;
}
$a = 34;
$b = 23;
print addition ($a, $b); //Renvoi 57
//$a vaut toujours 34 et $b 23

Le passage par valeur est préférable car ainsi la fonction n'a aucun effet "incontrôlé" sur le script dans lequel elle est appelée.
Il est cependant possible de passer les variables par adresse, en préfixant la variable par &. C'est alors une référence à la variable qui est passée et non une copie.
Si l'on recourt au passage par adresse, il est préférable de le définir dans la fonction.

function addition ($i, $j, &$resultat)
{
 $resultat = $i + $j;
 return $resultat;
}
$a = 34;
$b = 23;
$valeur = "toto";
addition ($a, $b, $valeur);
print $valeur; //Renvoi 57 : $valeur a été modifié par l'appel de fonction
//$a vaut toujours 34 et $b 23

Valeurs par défaut

Il est possible d'attribuer une valeur par défaut aux arguments. Ils doivent alors obligatoirement être placés en dernier dans la liste des arguments.
Si un argument peut ne pas être défini, on lui attribue la valeur unset. La syntaxe est la suivante:

function nomFonction ($arg1, $arg2, ... , $argN = "valeur_par_défaut")
{
 ...
}

Fonctions et variables

Variables automatiques

Ces variables sont créées quand on entre dans leur espace de définition (soit un script, soit une fonction) et disparaissent quand on en sort.

Variables statiques

Une variable automatique est détruite quand on sort de son espace de définition, par exemple une fonction. Sa valeur n'est pas sauvegardée entre deux appels. Les variables statiques sont persistantes entre deux appels et se déclarent de la manière suivante:

static $varStatique;

Variables globales

Contrairement aux variables automatiques, une variable globale est définie en dehors de toute fonction mais reste accessible au sein de celles-ci.

global $varStatique;

Utilisez les variables statiques et globales avec parcimonie. Elles sont sources d'erreurs difficiles à détécter.

Haut de page

5. Les objets

Définition

Un objet est un ensemble de fonctions et de variables conçues depuis un modèle nommé classe. Ces fonctions, appelées méthodes, sont accessibles via des variables appelées propriétés ou attributs.
Une classe permet d'instancier des objets à l'aide d'une méthode particulière appelée constructeur.

Classe

Avant de créer un objet, il faut créer sa classe.

class nomClasse {

//Déclaration des propriétés :
var $propriete1; //Cette propriété sera définie lors de l'appel de la classe
var $propriete2 = "maValeurParDefaut"; //Celle-ci en revanche possède une valeur par défaut

function maMethode ([arg1, $arg2, ...]) { ... }

...

}

Objet

Pour créer un objet, la syntaxe est la suivante:

nomObjet = new nomClasse ([$arg1, $arg2, $arg3 ...])

Une fois l'objet créé, il est possible d'accéder à ses propriétés et ses méthodes avec la syntaxe suivante :

nomObjet->propriete1; //Permet d'accéder au contenu de la propriete1
nomObjet->maMethode(); //Permet d'appeler la méthode maMethode

Si vous écrivez du code à l'intérieur d'une classe et que vous voulez faire référence aux propriétés de l'objet qui va être créé, vous disposez du mot clef $this :

$this->propriete1;

Certains langage objet permettent de définir un niveau de confidentialité qui empêchent de modifier des propriétés depuis l'extérieur. Php ne propose aucune protection de ce type : si on connaît le nom d'une propriété, on peut y accéder.

Constructeur

Si vous créez dans votre classe une méthode qui porte le même nom que la classe, par exemple nomClasse, cette méthode, appelée constructeur, sera appelée automatiquement lors de l'instanciation.

class nomClasse {

var $propriete1;
var $propriete2 = "maValeurParDefaut";

 function nomClasse ([$arg1, $arg2, ...]) {
  //Cette fonction au nom imposé est un constructeur
  //Elle s'exécute automatiquement à l'appel de la classe.
 }

}

Exemple

La notion d'objet obligeant à manipuler beaucoup de concepts nouveaux, le mieux est de prendre un exemple.
Nous allons créer une classe qui puisse accueillir un tableau de champs, organisé en colonnes nommées. On créera une méthode pour permettre l'affichage de ces données dans le navigateur.

Définir les propriétés de la classe

Nous avons besoin d'un tableau pour garder en mémoire les noms de colonne.
Nous avons besoin d'un autre tableau, multidimensionnel celui-là, pour conserver les champs.
Pour l'exemple, nous allons définir une propriété qui gardera en mémoire le nombre de colonnes.

class table {

 var $champs = array();
 var $nomcol = array();
 var $nbcol;
}

Créer un constructeur

Les noms de colonnes sont fournis immédiatement et placés dans la variable $nomcol. On en profite pour calculer $nbcol.

class table {

 var $champs = array();
 var $nomcol = array();
 var $nbcol;

 function table ($noms)
 {
  $this->nomcol = $noms;
  $this->nbcol = count ($noms);
 }
}

Méthode ajouter()

Cette méthode reçoit le contenu d'une ligne de données sous la forme d'un tableau, en supposant que les données sont fournies dans le même ordre que les noms de colonne.

function ajouter ($ligne)
{
 array_push ($this->champs, $ligne);
}

La fonction array_push($table, $valeur_a_ajouter) permet d'ajouter une valeur à la fin d'un tableau.

Méthode afficher()

Comme son nom l'indique, elle est destinée à afficher les en-têtes de colonne puis le contenu de $champs.
Le principe de cette méthode a déjà été vu à l'exercice 6.

function afficher ()
{
 foreach ($this->nomcol as $nom)
  print "<B>$nom</B>";
 print "<BR>";
 foreach ($this->champs as $sstable)
 {
  foreach ($sstable as $valeur)
   print "$valeur";
  print "<BR>";
 }
}

Il ne reste plus qu'à créer un objet à l'aide de la classe table et à jouer avec :

$test = new table (array ("a", "b", "c"));
$test->ajouter(array(1,2,3));
$test->ajouter(array(4,5,6));
$test->ajouter(array(7,8,9));
$test->afficher();

Héritage

Si la classe table vous a plu, peut être voudrez-vous l'améliorer. Plutôt que d'ajouter de nouvelles méthodes à la classe table, vous pouvez choisir de créer une nouvelle classe toto qui héritera de toutes les méthodes de table et dans laquelle vous pourrez rajouter de nouvelles fonctionnalités.
Il suffit d'utiliser le mot extends :

class toto extends table {

 function afficherJoli ()
 {
  //Instructions pour un affichage plus sympa.
 }

}

La classe toto possède désormais les méthodes de table : ajouter(), afficher() auxquelles s'ajoute maintenant afficherJoli().
Si on veut néanmoins modifier les méthodes de table dans toto, il suffit de créer une méthode portant le même nom.

class toto extends table {

 function ajouter ()
 {
  //Nouvelle méthode plus performante pour afficher
 }

}

Si, ayant créé cette méthode afficher() propre à toto, on veut néanmoins faire appel à la méthode telle qu'elle est écrite dans table, l'appel à la méthode s'écrira de cette manière :

table::afficher()
Haut de page

6. Exercices

Exercice 1

Lesquels de ces noms de variables sont corrects ?

  1. $__maVariable
  2. maVariable
  3. $2par2
  4. $_2par2
  5. $deux-par-deux

Solution

Exercice 2

Soit l'énoncé suivant :

$i = "jarry";
$$i = "baudelaire";

Que me renvoie print "${$i}"; ?
Que me renvoie print "$jarry"; ?
Que me renvoie print $baudelaire; ?

Le morceau de code suivant contient deux erreurs. Lesquelles?

$toto1 = "framboises";
$toto2 = "pommes";
$toto3 = "oranges";
$toto4 = "mûres";

for ($i=1;$i<5;$i++)
{
 $nom = "toto$i";
 if ("pommes" == $nom)
  echo "Ouai, toto aime les $$nom";
}

Solution

Exercice 3

Sachant que la masse volumique du plomb est de 11,35 g/cm3 ou kg/l, écrivez un programme qui affiche quelle est la masse d'un volume x de plomb.

Solution

Exercice 4

  1. Quels sont les 6 types disponibles dans Php?
  2. On regroupe ces types en deux catégories, quelles sont-elles?
  3. Quelle est la différence entre ces deux catégories?

Solution

Exercice 5

Réalisez une page html (en php bien sûr) qui affiche dans le navigateur :

<TABLE>
  print "$nom = 123%4";
</TABLE>

Faites en sorte que votre code source soit correctement indenté et tabulé.

Solution

Exercice 6

  1. Quelle fonction pouvez-vous utiliser pour définir un tableau ?
  2. Quel est le numéro d'index du deuxième élément du tableau ci-dessous :
    $fruits = array ("pomme", "framboise", "banane");
  3. Sans utiliser de fonction, quelle serait la méthode la plus facile pour ajouter l'élément "fraise" au tableau $fruits ?
  4. Comment pourriez-vous connaître le nombre d'éléments d'un tableau ?
  5. Quelle est la façon la plus simple de parcourir le tableau $fruits ?
  6. Créez un tableau multidimensionnel indiquant nom, âge et profession de trois personnes. Ecrivez un programme destiné à afficher le contenu de ce tableau.

Solution

Exercice 7

  1. Que renvoie :
    print gettype ("12");
  2. Que renvoie :
    $var1 = 12;
    $var2 = (boolean) $var1;
    print $var1." ".$var2;
  3. Que renvoie :
    $var = 7.614;
    settype ($var, "integer");
    print $var;

Solution

Exercice 8

Retrouvez la valeurs de chaque variable à chaque étape :

$i = 24;
$i++;
--$i;
$j = $i++;
$k = --$i;

Solution

Exercice 9

Trouvez deux structures de contrôles qui renvoient true lorsque $a vaut 13.
Puis déterminez les valeurs de $a pour laquelle la structure de contrôle suivante renvoie true :

($a<33 or $a>63) && ($a>=30 or $a<12);

Solution

Exercice 10

  1. Utilisez une instruction if pour afficher "Salut les jeunes" dans le navigateur si une variable $age se situe strictement en-dessous de 18 et "Salut les vieux" si elle se situe au-dessus de 65 ? Si $age contient une autre valeur, la chaine "Salut tout le monde" devrait s'afficher.
  2. A l'aide d'un opérateur ternaire, affichez "Je veux sortir" lorsque la variable $humeur contient "bonne" et "Je ne veux pas sortir" dans les autres cas.

Solution

Exercice 11

  1. Utilisez do ... while pour afficher la table de multiplication de 5.
  2. Refaites le même exercice avec l'instruction for.
  3. Toujours à l'aide de l'instruction for, affichez toutes les tables de 1 à 10.
  4. Refaites le même exercice mais affichez les résultats au sein d'un tableau.

Solution

Haut de page

Solutions

Exercice 1

Lesquels de ces noms de variables sont corrects ?

  1. $__maVariable BON: un nom de variable peut commencer par un "_"
  2. maVariable FAUX: une variable commence par un $
  3. $2par2 FAUX: commence par 2, or un nom de variable ne peut pas commencer par un chiffre
  4. $_2par2: BON: un nom de variable peut commencer par un "_"
  5. $deux-par-deux FAUX : " - " interdits. Un nom de variable ne peut contenir que des caractères alphanumériques et le caractère "_"

Exercice 2

$i = "jarry";
$$i = "baudelaire";
print "${$i}"; //Renvoi baudelaire
print "$jarry"; //Renvoi baudelaire aussi
print $baudelaire; //Erreur: la variable n'existe pas

Ce morceau de code contient deux erreurs. Lesquelles?

$toto1 = "framboises";
$toto2 = "pommes";
$toto3 = "oranges";
$toto4 = "mûres";

for ($i=1;$i<5;$i++)
{
 $nom = "toto$i";
 if ("pommes" == $$nom)
  echo "Ouai, toto aime les ${$nom}";
}

Le test if vérifie si le contenu d'une des 4 variables correspond à "pommes". Mais $nom contient uniquement le nom d'une des quatre variable (toto1 par exemple). Pour tester leur contenu, il faut ajouter un second $ devant.
echo doit afficher dans une chaîne de caractère le contenu de la variable séléctionnée. Or dans une chaîne de caractère, le second $ n'est interprêté que si l'on ajoute des accolades "{ }".

Exercice 3

Sachant que la masse volumique du plomb est de 11,35 g/cm3 ou kg/l, écrivez un programme qui affiche quelle est la masse d'un volume x de plomb.

define ("MVOLUMIQUE_PB", 11.35);
$volume = 20;

print "Rappel : masse (kg) = masse volumique (kg/dm3) x volume (en dm3)<BR>";
print "Sachant que la masse volumique du plomb est de ".MVOLUMIQUE_PB."<BR>";
print "On peut en déduire que $volume cm3 de plomb pèsent ".(MVOLUMIQUE_PB*($volume/1000))." kg.";

Il est important que dans votre programme vous ayez distingué la masse volumique, qui est une constante (et qui doit être défini par define()) du volume, qui peut varier à chaque expérience et doit donc être mis dans une variable.
Vous aurez remarqué qu'une constante ne peut pas s'appeler depuis une chaine de caractère contrairement aux variables.

Exercice 4

  1. Quels sont les 6 types disponibles dans Php?
    Php dispose d'un type integer (entier), d'un type double (flottant), d'un type string (chaîne), d'un type boolean (booléen), d'un type array (tableaux) et d'un type object pour les objets.
  2. On regroupe ces types en deux catégories, quelles sont-elles?
    Les 4 premiers types (entier, flottant, chaine, booléen) sont dits scalaires. Les deux derniers (tableau et objets) sont dits agrégats.
  3. Quelle est la différence entre ces deux catégories?
    Les variables de type scalaire font référence à une unique variable tandis que celles de type agrégat font référence à un ensemble de variables.

Exercice 5

Réalisez une page html (en php bien sûr) qui affiche dans le navigateur :

<TABLE>
  print "$nom = 123%4";
</TABLE>

Voici le code correspondant :

print "&lt;TABLE&gt;</BR>";
print "&nbsp;&nbsp;print \"\$nom = 123%4\";</BR>";
print "&lt;/TABLE&gt;";

Les caractères " et $ de la deuxième ligne doivent être précédés du caractère d'échappement "\".
Pour les caractères "<" et ">" de la balise <TABLE>, il faut se souvenir de leur équivalent html: &lt; et &gt; afin que la balise ne soit pas interprétée mais simplement affichée à l'écran.
&nbsp; permet de mettre quelques caractères blancs au début de la deuxième ligne. Les balises </br> permettent d'afficher les sauts de lignes dans la page html.

Pour que le code source soit correctement tabulé et indenté, utilisez les caractères d'échappement " \n " et " \t ". Cela vous donne à l'arrivée :

print "&lt;TABLE&gt;</BR>\n";
print "&nbsp;&nbsp;\t print \"\$nom = 123%4\";</BR>\n";
print "&lt;/TABLE&gt;";

Exercice 6

  1. Quelle fonction pouvez-vous utiliser pour définir un tableau ?
    array
  2. Quel est le numéro d'index du deuxième élément du tableau ci-dessous :
    $fruits = array ("pomme", "framboise", "banane");
    L'indexation d'un tableau commençant à 0, le deuxième élément a pour index 1.
  3. Sans utiliser de fonction, quelle serait la méthode la plus facile pour ajouter l'élément "fraise" au tableau $fruits ?
    La syntaxe $fruits[] = "fraise"; permet de rajouter un élément à la fin du tableau.
  4. Comment pourriez-vous connaître le nombre d'éléments du tableau $fruits ?
    La fonction count($fruits); permet de connaître le nombre d'éléments de $fruits.
  5. Quelle est la façon la plus simple de parcourir un tableau en boucle ?
    Utiliser la fonction foreach.
  6. Créez un tableau multidimensionnel indiquant nom, âge et profession de trois personnes. Ecrivez un programme destiné à afficher le contenu de ce tableau.
    $rg = array (
                    array ("NOM" => "Auriol",
                           "AGE" => "51",
                           "PROFESSION" => "Président"),
                    array ("NOM" => "Vespucci",
                           "AGE" => "53",
                           "PROFESSION" => "Géographe"),
                    array ("NOM" => "Desaix",
                           "AGE" => "46",
                           "PROFESSION" => "Militaire"),
                          );
                    
                    foreach ($rg as $sstableau)
                    {
                     foreach ($sstableau as $clef => $valeur)
                      print "$clef : $valeur <BR>";
                    }
    Vous aurez noté que foreach fonctionne aussi bien avec un tableau indexé qu'avec un tableau associatif.

Exercice 7

  1. Que renvoie :
    print gettype ("12");
    -----> string
  2. Que renvoie :
    $var1 = 12;
    $var2 = (boolean) $var1;
    print $var1." ".$var2;

    -----> $var1 vaut toujours 12 et $var2 vaut 1 ou TRUE
  3. Que renvoie :
    $var = 7.614;
    settype ($var, "integer");
    print $var;

    -----> $var vaut 7 (la partie entière de 7.614)

Exercice 8

Retrouvez la valeurs de chaque variable à chaque étape :
$i = 24; //$i vaut 24
$i++; //$i vaut 25
--$i; //$i vaut 24
$j = $i++; //$i vaut 25, $j vaut24
$k = --$i; //$i vaut 24, $k aussi

Exercice 9

Trouvez deux structures de contrôles qui renvoient true lorsque $a vaut 13. (($a < 13) and ($a > 11))
!(($a > 13) or ($a < 11))
($a == 12)

Puis déterminez les valeurs entières positives de $a pour laquelle la structure de contrôle suivante renvoie true :
($a<33 or $a>63) && ($a>=30 or $a<12);
//Le plus simple est de résoudre le problème en deux temps:
//quelles sont les valeurs qui renvoient True au test: ($a<33 or $a>63)?
//  ce sont les entiers de 0 à 32 et de 64 à l'infini.
//quelles sont les valeurs qui renvoient True au test: ($a>=30 or $a<12)?
//  ce sont les entiers de 0 à 11 et de 30 à l'infini.
//quelles sont les valeurs qui répondent aux deux conditions?
//  ce sont les entiers de 0 à 11, de 30 à 32 et de 64 à l'infini.

Exercice 10

Utilisez une instruction if pour afficher "Salut les jeunes" dans le navigateur si une variable $age se situe strictement en-dessous de 18 et "Salut les vieux" si elle se situe au-dessus de 65 ? Si $age contient une autre valeur, la chaine "Salut tout le monde" devrait s'afficher.
$age = 12;//12 ans ou n'importe quel âge.

if ($age < 18)
 print "Salut les jeunes";
else if ($age >= 65)
 print "Salut les vieux";
else
 print "Salut tout le monde";

À l'aide d'un opérateur ternaire, affichez "Je veux sortir" lorsque la variable $humeur contient "bonne" et "Je ne veux pas sortir" dans les autres cas.
$humeur = "bof";
($humeur == "bonne") ? $i[]="" : $i = array (" ne", " pas");
print "Je".$i[0]." vais".$i[1]." aller me promener.";

Exercice 11

Utilisez do ... while pour afficher la table de multiplication de 5 :
$i = 1;
$table = 5;
do {
 print "$i x $table = ".$i * $table."<BR>";
 $i++;
} while ($i < 11);

Refaites le même exercice avec l'instruction for :
$table = 5;
for ( $i=1 ; $i <11 ; $i++)
 print "$i x $table = ".$i * $table."<BR>";

Toujours à l'aide de l'instruction for, affichez toutes les tables de 1 à 10 :
for ( $i=1 ; $i<=10 ; $i++)
{
 print "Table de $i : <BR>";
 for ($j=1 ; $j<=10 ; $j++)
  print "$i x $j = ".$i*$j."<BR>";
}

Refaites le même exercice mais affichez les résultats au sein d'un tableau :

print "<TABLE><TR>";
for ( $i=1 ; $i<=10 ; $i++)
{
 print "<TD>Table de $i : <BR>";
 for ($j=1 ; $j<=10 ; $j++)
  print "$i x $j = ".$i*$j."<BR>";
}
print "</TABLE>";
Haut de page
Plan du site  |  Mentions légales  |  Crédits  |  Aide