PHP

Introduction

Préambule

PHP est un langage de script, c’est-à-dire que le code est enregistré sous forme de fichier texte sur le disque dur, et qu’il est exécuté à la demande par un programme chargé de l’interpréter.
C’est habituellement l’internaute (par l’intermédiaire de son navigateur Web) qui demande l’exécution d’un script lorsqu’il consulte une page Web.
La demande est reçue par le serveur Web (par exemple Apache), qui se rend compte qu’il doit la sous-traiter à PHP.

Libre, gratuit, simple d’utilisation et d’installation, ce langage nécessite comme tout langage de réseau une bonne compréhension des mécanismes sous-jacents, et une connaissance des problèmes de sécurité.

Parmi les concurrents de PHP, on peut citer les suivants :

  • ASP .NET : conçu par Microsoft, il exploite le framework (c’est-à-dire un ensemble de bibliothèques qui fournissent des services pour les développeurs) .NET bien connu des développeurs C#. Ce langage peut être intéressant si vous avez l’habitude de développer en C# .NET et que vous ne voulez pas être dépaysés.
  • Ruby on Rails : très actif, ce framework s’utilise avec le langage Ruby et permet de réaliser des sites dynamiques rapidement en suivant certaines conventions.
  • Django : il est similaire à Ruby on Rails, mais il s’utilise en langage Python.
  • Java et les JSP (Java Server Pages) : plus couramment appelé « JEE » ou « Java EE », il est particulièrement utilisé dans le monde professionnel. Il demande une certaine rigueur. La mise en place d’un projet JEE est traditionnellement un peu plus longue et plus lourde mais le système est apprécié des professionnels et des institutions. C’est ce qui est utilisé sur le site des impôts français, par exemple.

Outils de développement

Afin de commencer sur de bonnes bases, vous aurez besoin d’un bon éditeur de texte. Il est préférable de choisir un éditeur de texte proposant une coloration syntaxique pour le PHP, cela facilitera votre travail de codage.

Vous pourrez changer d’éditeur à tout moment sans aucune conséquence.

Il vous faudra également installer un serveur sur votre machine de développement.

  • Sous Linux : LAMP (ou XAMPP ) = Linux Apache MySQL PHP
  • Sous Windows : WAMP = Windows Apache MySQL PHP
  • Sous Mac : MAMP = Mac Apache MySQL PHP

Les rôles de ces quatre composants sont les suivants :

  • Linux, Windows ou Mac assurent l’attribution des ressources aux autres composants;
  • Apache est le serveur web « frontal » : il est « devant » tous les autres et répond directement aux requêtes du client web (navigateur) [http://www.apache.org];
  • MySQL est un système de gestion de bases de données (SGBD). Il permet de stocker et d’organiser des données [http://www.mysql.com];
  • le langage de script PHP permet la génération de pages web dynamiques et la communication avec le serveur MySQL.[http://www.php.net]

Tous les composants peuvent être situés :

  • sur une même machine
  • sur deux machines, généralement Apache et le langage de script d’un côté et MySQL de l’autre
  • sur de nombreuses machines pour assurer la haute disponibilité (répartition de charge et/ou failover).

EasyPHP : environnement de développement Apache/PHP/MySQL pour Windows.

Machine virtuelle : environnement virtuel sur mesure.

Documentation

Le site officiel de PHP est extrêmement bien fait. La documentation de n’importe quelle fonction est accessible depuis l’URL : http://php.net/nom_de_la_fonction

N’oubliez pas de consulter les commentaires utilisateurs, car de très nombreux commentaires donnent des conseils très utiles.

http://php.net/docs.php

Langage statique, langage dynamique

Site statique
Site dynamique

Le client et le serveur doivent utiliser le même protocole de communication.
Un serveur est généralement capable de servir plusieurs clients simultanément.

Dans une utilisation Web, l’exécution du code PHP se déroule ainsi : lorsqu’un visiteur demande à consulter une page Web, son navigateur envoie une requête au serveur HTTP correspondant. Si la page est identifiée comme un script PHP, le serveur appelle l’interpréteur PHP qui va traiter le code php et générer le code final de la page (constitué généralement HTML, CSS et JS). Ce contenu final est renvoyé au serveur HTTP, qui l’envoie enfin au client.

Les programmes côté serveur améliorent énormément la sécurisation du code. On a aussi un grand nombre de possibilité d’interactions avec d’autres systèmes ou applications comme les bases de données. Et ils facilitent la maintenance des sites web en permettant de conserver dans un seul fichier les parties de page web qui se retrouvent à l’identique dans toutes les pages du site. Il s’agit souvent de l’en-tête et du pied de page, qui contiennent des informations comme le nom du site, les coordonnées de son auteur, etc.

Premiers pas

Affichage

Commençons par un exemple, cela nous permettra de nous immerger plus facilement dans la théorie.

<?php
echo "Hello world!";
?>

Vous pouvez voir certaines similitudes avec le HTML, par exemple l’utilisation d’une balise de début <?php et d’une balise de fin ?>. Toute portion de code PHP doit donc être placée entre ces balise d’ouverture et de fermeture.

Si votre code n’est pas correct, PHP arrête l’exécution du script en lançant une erreur :

<?php
echo;
?>

affichera :

Parse error: syntax error, unexpected ';' in /home/domaine/www/test.php on line 2

L’erreur affichée donne de très nombreuses informations permettant de résoudre le problème. Ici par exemple, on nous informe qu’une erreur de syntaxe se trouve près d’un point virgule, et que ce point virgule n’est pas ce qui était attendu.
En effet, « echo » sert à afficher quelque chose, il manque donc le nombre ou le texte à afficher.

Boucles

Les boucles sont l’un des attraits des langages de script, car c’est quelque chose que nous avons déjà vu en JavaScript, que le HTML ne peut pas faire.

Afficher les chiffres de 1 à 1000 :

<?php
for($i=0; $i<1000; $i++) {
  echo $i;
} 
?>

Il suffit de mettre n’importe quelle suite d’actions à la place du echo $i;. L’une des applications classiques d’une boucle est d’afficher certains éléments extraits d’une base de données.

Présentation du code

Vous pouvez varier la présentation du code source (ajouter des espaces, des tabulations et des sauts de ligne) sans que cela affecte l’exécution.

Une « instruction » est une portion de code se terminant par un point virgule (;). Par convention, on la représente sur une ligne de code propre.
Par exemple :

<?php
echo "Hello World!";
echo "Je suis en cours PHP.";
?>

Les commentaires

Un commentaire est un bout de script qui ne sera pas exécuté par l’interpréteur. Sa fonction est de décrire ou d’expliquer une partie du code pour en faciliter la compréhension, donc la maintenance, ou qui est utile dans un travail collaboratif (plusieurs développeurs travaillant sur le même programme).

Les commentaires sur une ligne débute après les //, qui marquent le début du commentaire.

<?php 
// affiche le texte "bonjour !" 
echo 'bonjour !';  
?>

Les commentaires sur plusieurs lignes : ils peuvent occuper une ou plusieurs lignes et sont délimités par les balises /* et */.

<?php 
/* 
Nous allons maintenant afficher du texte 
On peut commenter sur plusieurs lignes 
et mettre du code <?php echo 'test'; ?> dans les commentaires
 */ 
echo 'bonjour !'; 
?>

Les opérateurs

Arithmétique

PHP dispose des opérateurs classiques pour effectuer des calculs :

<?php
echo 1+1; //addition
echo 1-1; //soustraction
echo 1*1; //multiplication
echo 1/1; //division
echo 1%1; //modulo (reste de la division)
?>

Affectation de variable

Les opérateurs d’affectation permettent de donner une valeur à une variable.

Valeurs numériques :

<?php
$x = 5;
$x += 1; // ajoute à la valeur existante (=> $x vaut 6)
$x -= 2; // soustrait à la valeur existante (=> $x vaut 4)
$x *= 3; // multiplie la valeur existante (=> $x vaut 12)
$x /= 4; // divise la valeur existante (=> $x vaut 3)
echo $x; // affiche "3"
?>

Chaînes de caractères :

<?php
$str = 'texte';
$str .= ' additionnel'; // concatène à la suite de la chaîne existante
echo $str; //affiche "texte additionnel"
?>

Comparaison

L’opérateur == est un opérateur de comparaison de valeurs. Il ne tient pas compte du type de la variable, puisque PHP est un langage à typage faible. L’opérateur != est l’inverse de ==.

<?php
echo 1==1; // affiche "1"
echo 1==2; // n'affiche rien puisque c'est faux
echo 1==1.0; // affiche "1" puisque ce sont deux valeurs entières équivalentes
echo '1'==1.0; // affiche "1" puisque la chaîne "1" est équivalente à l'entier numérique "1"
echo '1'=='1.0'; // affiche "1" puisque leur valeur numérique évalue à la même valeur entière
?>

L’opérateur === est le même que le précédent, sauf qu’il n’effectue pas de conversion de type. Il est donc plus rapide que l’opérateur == et il ne donne pas les mêmes résultats. L’opérateur !== est l’inverse de ===.

<?php
echo 1===1; // affiche "1" puisque les deux valeurs sont identiques en valeur et en type
echo 1===2; // n'affiche rien puisque c'est faux
echo 1===1.0; // n'affiche rien puisque le type diffère (int vs. float)
echo '1'===1.0; // n'affiche rien puisque le type diffère (string vs. float)
echo '1'==='1.0'; // n'affiche rien puisque les deux chaînes ne sont pas égales
?>

Les opérateurs <, >, <= et >= sont assez classiques pour ne pas nécessiter d’explication.
Ils fonctionnent aussi bien pour les nombres (comparaison de valeur) que pour les chaînes (ordre alphabétique).

Incrémentation / décrémentation

  • ++ : Augmenter de 1 ;
  • -- : Diminuer de 1.
<?php
$x = 5;
echo ++$x; // incrémente puis affiche 6
echo $x; // affiche 6
$x = 5;
echo $x++; // affiche 5 puis incrémente
echo $x; // affiche 6
$x = 5;
echo --$x; // réduit puis affiche 4
echo $x; // affiche 4
$x = 5;
echo $x--; // affiche 5 puis réduit
echo $x; // affiche 4
?>

Comparaison logique

Comme dans tout langage de programmation, ces opérateurs permettent de vérifier plusieurs conditions à la fois dans un même test.

<?php
if ($variable > 2 && $variable < 10) {
  echo 'valeur entre 2 et 10 (exclus)';
}
if($variable > 2 || $variable < 10) {
  echo 'valeur supérieure à 2 ou inférieure à 10 (exclus)';
}
?>

Les variables

Approche

Nous l’avons déjà abordé en JavaScript, une variable est une zone mémoire qui va contenir des données. Schématiquement, une variable peut être assimilée à une boîte opaque sur laquelle est collée une étiquette portant un nom (le nom de la variable). A l’intérieur de ce paquet se trouve quelque chose (la valeur) d’un type précis (le type de la variable). Quand nous souhaitons obtenir cette valeur, nous ne nous adressons pas directement à elle mais nous y faisons référence en sélectionnant la boîte par son nom.

En PHP toutes les variables commencent par le caractère $, c’est le pointeur. De même, toute les déclarations de variables doivent se terminer par un point-virgule ;

Une variable est une structure de données de type primitif (entier, réel, caractère, chaîne de caractères, booléen ou null) ou bien de type structuré (tableau ou objet) qui permet de stocker une ou plusieurs valeurs.

Types

Dès l’école primaire, on nous apprend à ne pas additionner des choux avec des carottes lorsque l’on apprend les « unités » en mathématiques. Les « types » sont exactement la même chose en programmation, ils ne sont pas nécessairement compatibles entre eux. Il existe cependant des moyens de convertir un type en un autre, tout comme on peut convertir des grammes en kilogrammes.

Les types sont définis à la fois pour aider le programmeur à connaître les données qu’il manipule (sécurité) et pour optimiser la gestion de la mémoire par l’interpréteur PHP. Il convient donc de connaître les différents types disponibles en PHP.

Les types PHP sont :

  • boolean : un contraste « vrai » ou bien « faux », « blanc » ou « noir », « 1 » ou « 0 », « yin » ou « yang »… ;
  • integer : une valeur numérique entière ;
  • double : une valeur numérique flottante (à virgule) ;
  • string : une chaîne de caractères (texte) ;
  • array : un tableau (ensemble de valeurs) ;
  • object : un objet (instance de classe) ;
  • resource : une ressource (type abstrait, inutilisable par le programmeur, utilisé uniquement pour des fonctions) ;
  • NULL : un type spécial qui désigne l’absence de valeur.

Déclaration d’une variable :

<?php
// déclarerons quelques variables et mettons des valeurs dans ces variables
$mon_texte = 'Bonne journée !!'; // Type string (chaine de caractères)
$mon_chiffre = 9; // Type entier
$estEtudiant = true; // Type booléen
$cours = array('physique','chimie','informatique','philosophie'); // Type tableau
$unEtudiant = new Etudiant(); // Objet de type Etudiant
// Ensuite nous les afficherons pour l'utilisateur.
echo $mon_texte;
// Pour concaténer des chaînes de caractères en PHP, utilisez l'opérateur '.' (point) 
echo 'Mon chiffre favoris est '. $mon_chiffre
?>

Majuscules et minuscules

Le nom de la variable est sensible a la case. Cela veut dire qu’il fait la différence entre une majuscule et une minuscule. Il faut y faire attention, c’est une source d’erreur fréquente.

$ma_variable n’est pas egal à $Ma_Variable, ce sont 2 variables différentes.

Choix des noms des variables

  1. Les variables doivent commencer par une lettre ou par l’underscore _,
  2. Les variables peuvent être composées seulement par des caractères alpha-numériques et des underscore. a-z, A-Z 0-9, ou _,
  3. Les variables de plus d’un mot pourront être séparées par des underscores: $ma_variable,
  4. Les variables de plus d’un mot peuvent aussi être différenciées avec des majuscules: $maVariable,
  5. Il n’y a pas de limite à la taille du nom des variables,
  6. Il existe des mots de variables réservés. Voir la documentation officielle.

Guillemets, apostrophes, caractère d’échappement

La syntaxe des guillemets permet d’utiliser sans crainte les apostrophes, mais tout se complique dès que l’on souhaite intégrer des guillemets dans la chaîne de caractères :

<?php
echo "Voici un exemple d'apostrophe";
echo "Voici un exemple de \"guillemets\"";
?>

La syntaxe des apostrophes permet d’utiliser des guillemets dans le texte, mais nous ennuie avec les apostrophes :

<?php
echo 'Voici un exemple de "guillemets"';
echo 'Voici un exemple d\'apostrophe';
?>

les variables prédéfinies

Ce sont des variables inclues dans PHP qui évitent le recours à des fonctions longues pour obtenir le même résultat. Elles sont très utiles et permettent d’avoir des informations sur le client et le serveur.

Voici les variables classées par type :

  • $GLOBALS : ce tableau contient toutes les variables globales définies.
  • $_GET : ce tableau contient toutes les variables provenant de l’URL courante.
  • $_POST : ce tableau contient toutes les variables provenant d’un formulaire en méthode post.
  • $_SERVER : ce tableau contient toutes les variables fournies par le serveur Web ou le client.
  • $_COOKIE : ce tableau contient toutes les valeurs et noms des cookies envoyés par le client.
  • $_FILES : ce tableau contient les variables fournies par le navigateur lors du téléversement de fichier par le client.
  • $_ENV : ce tableau contient toutes les variables fournies par l’environnement PHP.
  • $_REQUEST : ce tableau contient toutes les variables fournies par l’intermédiaire d’un script d’entré (GET, POST, COOKIE… par exemple).
  • $_SESSION : ce tableau contient toutes les variables de session utilisées.

Par exemple, les variables serveur permettent d’accéder à différents paramètres du serveur :

  • $_SERVER['PHP_SELF'] Donne l’arborescence de la page courante en partant de la racine de votre site (si PHP fonctionne en ligne de commande la variable n’est pas accessible)
  • $_SERVER['GATEWAY_INTERFACE'] Contient le numéro de révision de l’interface CGI du serveur
  • $_SERVER['SERVER_NAME'] Nom du serveur hôte sur lequel est exécuté le script.
  • $_SERVER['SERVER_PROTOCOL'] Nom et révision du protocole de communication HTTP/1.0
  • $_SERVER['REQUEST_METHOD'] Méthode de requête utilisée pour accéder à la page ‘GET’,’HEAD’, ‘POST’ ou ‘PUT’
  • $_SERVER['QUERY_STRING'] Donne les arguments placés après le point d’interrogation si ils existent dans l’URL.
  • $_SERVER['DOCUMENT_ROOT'] Racine de votre site.
  • $_SERVER['HTTP_ACCEPT_ENCODING'] Contenu de l’en-tête Accept-Encoding: de la requête courante, si elle existe. Par exemple ‘gzip’.
  • $_SERVER['HTTP_ACCEPT_LANGUAGE'] Langage utilisé par votre navigateur ‘fr’
  • $_SERVER['HTTP_REFERER'] C’est l’adresse de la page par laquelle le client est venu sur votre site. Certains navigateurs permettent de modifier cette valeur, et certains pare-feux la bloquent.
  • $_SERVER['HTTP_USER_AGENT'] Navigateur utilisé par le client.
  • $_SERVER['REMOTE_ADDR'] Adresse ip du client.
  • $_SERVER['REMOTE_HOST'] Résolution DNS inverse qui permet de donner le nom d’hôte de l’IP du client
  • $_SERVER['REMOTE_PORT'] Port utilisé (généralement le 80) pour envoyer et recevoir des données HTTP entre le serveur et le client.
  • $_SERVER['SCRIPT_FILENAME'] Chemin absolu du script courant.
  • $_SERVER['PATH_TRANSLATED'] Chemin qui pointe sur le script courant.
  • $_SERVER['SCRIPT_NAME'] Nom de la page courante.
  • $_SERVER['REQUEST_URI'] URI servant à accéder à la page courante, /mapage.php par exemple.

Les tableaux

Avant toute chose, il convient de rappeler qu’un tableau PHP et un tableau HTML sont deux choses complètement différentes. Un tableaux PHP a pour fonction de stocker et manipuler des informations tandis qu’un tableau HTML sert à présenter des données sur un écran.
A la différence des types primitifs (entiers, réels, flottants, booléens, chaines de caractères), les tableaux peuvent stocker une ou plusieurs valeurs à la fois (de types différents).

<?php
// Déclaration d'un tableau vide
$fruits = array();
// Déclaration d'un tableau indexé numériquement
$legumes = array('carotte','poivron','aubergine','chou');
echo $legumes[2]; // Affichage de l'aubergine
// Déclaration d'un tableau associatif
$identite = array(
  'nom' => 'Hugo',
  'prenom' => 'Victor',
  'age' => 23,
  'estEtudiant' => true
  );
echo 'Nom : ' . $identite['nom']; // Affichage des valeurs du tableau associatif
?>

Pour ajouter une nouvelle valeur dynamiquement à la fin des tableaux précédents, il suffit de procéder comme expliqué dans l’exemple suivant :

<?php
// Ajout d'un légume au tableau indexé numériquement
$legumes[] = 'salade';
// Ajout de la taille de la personne dans le tableau associatif
$identite['taille'] = 180;
?>

Pour parcourir les valeurs contenues dans un tableau :

<?php
// Affichage des légumes
foreach($legumes as $valeur) {
  echo $valeur . '<br/>';
}
// Affichage de l'identité de la personne
foreach($identite as $cle => $valeur) {
  echo $cle . ' : ' . $valeur . '<br/>';
}
// Affichage du contenu du tableau
echo '<pre>';
print_r($identite);
echo '</pre>';
?>

Les structures de contrôle

les conditions

Une structure conditionnelle permet d’exécuter ou non une série d’instructions en fonction d’une condition d’origine.

Le langage PHP introduit 4 constructions conditionnelles : if, elseif, else et switch.

L’instruction conditionnelle if()

C’est la plus connue de toutes car on la retrouve dans tous les langages de programmation. Elle permet d’exécuter un bloc d’instructions uniquement si l’expression est vraie. Sa syntaxe est la suivante :

<?php 
$vitesse = 60; // Déclaration d'une variable 
if($vitesse > 50){ // On teste la valeur de la variable 
    echo 'Je perds 1 point pour excès de vitesse !'; 
} 
?>

La clause else

La clause else, ajoutée après l’accolade fermante du bloc if, permet de définir une série d’instructions qui seront exécutées si l’expression testée est fausse :

<?php 
$vitesse = 40; // Déclaration d'une variable 
if($vitesse > 50){ // On teste la valeur de la variable 
    echo 'Je perds 1 point pour excès de vitesse !'; 
} else { 
    echo 'Les policiers me laissent continuer ma route !'; 
} 
?>

L’instruction elseif()

Cette instruction se place obligatoirement après l’accolade fermante d’un bloc if() :

<?php 
$vitesse = 82; // Déclaration d'une variable 
if($vitesse > 50 && $vitesse < 70){ 
    echo 'Je perds 1 point pour excès de vitesse !'; 
} elseif($vitesse > 70 && $vitesse < 80){ 
    echo 'Je perds 2 points pour excès de vitesse !'; 
} elseif($vitesse > 80 && $vitesse < 90){ 
    echo 'Je perds 3 points pour excès de vitesse !; 
} elseif($vitesse > 90){ 
    echo 'Je perds 4 points pour excès de vitesse !'; 
} else{ 
    echo 'Les policiers me laissent continuer ma route !'; 
} 
?>

L’instruction switch()

Cette instruction conditionnelle permet de tester toutes les valeurs possibles que peut prendre une variable. Voici sa syntaxe :

<?php 
$personnage = 'elfe'; // Le joueur a choisi son personnage "elfe" 
switch($personnage){ // Test de la valeur du personnage 
    case 'sorcier' : 
        echo 'Vous avez choisi le sorcier !'; 
        break; 
    case 'guerrier' : 
        echo 'Vous avez choisi le guerrier !'; 
        break; 
    case 'roi' : 
        echo 'Vous avez choisi le roi !'; 
        break; 
    case 'elfe' : 
        echo 'Vous avez choisi l\'elfe !'; 
        break; 
    case 'ogre' : 
        echo 'Vous avez choisi l\'ogre !'; 
        break; 
    default : 
        echo 'Veuillez choisir votre personnage svp !'; 
        break; 
} 
?>

les boucles

On appelle « boucle » une structure de contrôle capable d’exécuter un certain nombre de fois une même série d’instructions, en fonction d’une ou plusieurs conditions à vérifier.

Il faudra toujours vérifier que les conditions deviennent fausses (FALSE) à un moment donné afin de pouvoir sortir de la boucle. Dans le cas contraire, la boucle deviendra infinie et ferait planter le programme.

La boucle for()

Sa syntaxe est simple et prend 3 paramètres obligatoires :

<?php 
// Boucle générant la table de multiplication du 9 
for($i=0; $i<=10; $i++){ // initialisation ; condition d'arrêt; itération 
    echo '9 x ' . $i .' = ' . (9*$i) ,'<br/>'; 
} 
?>

La boucle while()

La boucle while() va répéter un bloc d’instructions tant que la condition passée en paramètre reste vraie. Lorsque celle-ci deviendra fausse, le programme sortira de la boucle.

<?php 
// Déclaration et initialisation du compteur 
$i = 0; 
// Boucle générant la table de multiplication du 9 
while($i<=10){ 
    echo '9 x ' . $i . ' = ' . (9*$i) . '<br/>'; // Affichage de la nouvelle ligne 
    $i++; // Incrémentation du compteur 
} 
?>

La boucle foreach()

PHP dispose quant à lui de sa propre structure de contrôle permettant de parcourir le contenu d’un tableau. Il s’agit de la structure foreach().

<?php 
// Déclaration des deux tableaux 
$legumes = array('salade','oignon','piment','carotte','aubergine'); 
$couleurs = array('rouge'=>'#ff0000', 'vert' => '#00ff00', 'bleu' => '#0000ff'); 
// Affichage des légumes 
foreach($legumes as $legume){ 
    echo $legume . '<br />'; 
} 
// Affichage des couleurs et leur code hexadécimal 
foreach($couleurs as $couleur => $codeHexadecimal){ 
    echo $couleur . ' : ' . $codeHexadecimal . '<br />'; 
} 
?>

Les fonctions

Définition d’une fonction

Vous savez tous que PHP comprend, de base, une liste assez impressionnante de fonctions mises à votre disposition. Sans le savoir nous avons déjà utilisé une fonction ! Effectivement echo(); n’est rien d’autre qu’une fonction même si les parenthèses n’y sont pas obligatoires.
En revanche, vous aussi, vous pouvez très bien écrire vos propres fonctions.

Nous allons donc écrire une fonction qui va nous permettre d’écrire un texte mis en exergue, tout en spécifiant la couleur de ce texte, ainsi que sa taille.

<?php
// fonction N°1
function affiche_bonjour () { 
  echo 'Bonjour';  
} 
// fonction N°2
function texte_en_exergue ($texte, $taille = 'inherit', $couleur = 'inherit') { 
  echo '<strong style="font-size:'.$taille.';color:'.$couleur.'">'.$texte.'</strong>';  
}  
?>

La différence entre les deux fonctions ci-dessus réside dans le fait qu’il faudra passer au moins un paramètre à la deuxième fonction lors de l’appel.

Une fois la fonction définie elle ne s’exécute pas si on ne l’appelle pas.

Utiliser une fonction

Affichons un texte mis en forme en utilisant la fonction :

<?php
// fonction N°1
affiche_bonjour();
// fonction N°2
affiche_texte('Mon texte', '2em', '#00ffff');  
?>

Exercice 1

Créer une fonction qui s’appelle quelEstLeMeilleurProf(). Elle doit retourner Le prof de programmation Web

Exercice 2

Créer une fonction qui s’appelle concatenation(). Elle prendra deux arguments de type string. Elle devra retourner la concaténation des deux. Exemple : argument 1 = Jean; Argument 2 = Dupont; Résultat : Jean Dupont

Exercice 3

Créer une fonction qui s’appelle plusGrand(). Elle prendra trois arguments de type int. Elle devra retourner le plus grand des trois.

Exercice 4

Créer une fonction qui s’appelle dernierElementTableau(). Elle prendra un argument de type array. Elle devra retourner le dernier élément du tableau. Si le tableau est vide, il faudra retourner null.

Exercice 5

Créer une fonction qui s’appelle verificationMotDePasse(). Elle prendra un argument de type string. Elle devra retourner un boolean qui vaut true si le mot de passe fait au moins 8 caractères.

Exercice 6

Créer une fonction qui s’appelle capitale(). Elle prendra un argument de type string correspondant au nom d’un pays. Elle devra retourner le nom de la capitale des pays suivants :

  1. France ==> Paris
  2. Allemagne ==> Berlin
  3. Italie ==> Rome
  4. Maroc ==> Rabat
  5. Espagne ==> Madrid
  6. Portugal ==> Lisbonne
  7. Angleterre ==> Londres
  8. Tout autre pays ==> Inconnu

Il faudra utiliser la structure SWITCH pour faire cette exercice. Attention à la casse de la chaîne de caractère en entrée (aux majuscules, quoi).

Exercice 7

Créer une fonction qui s’appelle listeHTML(). Elle prendra deux arguments :

  1. Un string représentant le nom de la liste
  2. Un array représentant les éléments de cette liste

Elle devra retourner une liste HTML. Chaque élément de cette liste viendra du tableau passé en paramètre.

Exemple :
Paramètre : Titre : Capitale;
Liste : [« Paris », « Berlin », « Moscou »]
Résultat : <h3>Capitale</h3><ul><li>Paris</li><li>Berlin</li><li>Moscou</li></ul>

Comme vous pouvez le voir il n’y a pas d’espace ni de retour à la ligne entre les éléments de la liste. Pas d’espace non plus entre le titre et la liste.

Si le titre est null ou vide il faut que la fonction retourne null. Si le tableau est vide, il faut aussi que la fonction retourne null.

Exercice 8

Créer une fonction acronyme() qui prend en argument une chaîne de caractères et qui retourne le code HTML correspondant : les initiales de chaque mot en majuscule mis dans une balise HTML abbr, avec l’attribut title définissant l’acronyme.

Exemple :
En entrée : école de communication visuelle
En sortie : <abbr title="École de Communication Visuelle">ECV</abbr>

Code proposé en séance

<?php
/* 
 * Déclaration de la fonction
 * Elle ne sera pas exécutée tant qu'on ne l'aura pas appelée
 */
function quelEstLeMeilleurProf() {
  return 'Le prof de programmation Web !';
}

/*
 * Appel de la fonction
 * C'est à ce moment là qu'elle va être exécutée
 */
echo quelEstLeMeilleurProf();
?>

<hr>

<?php
function concatenation($terme1, $terme2) {
  return $terme1 . " " . $terme2;
}
echo concatenation('Jacques', 'Dupont'); // Doit afficher : "Jacques Dupont"
echo '<br>';
echo concatenation('Bonjour', 'Ah ah ah'); 
?>
<hr>
<?php
function plusGrand($nombre1, $nombre2 = -99999, $nombre3 = -99999) {
  if ( $nombre1 > $nombre2 && $nombre1 > $nombre3 ) {
    return $nombre1;
  }
  if ( $nombre2 > $nombre1 && $nombre2 > $nombre3 ) {
    return $nombre2;
  }
  return $nombre3;
}
echo plusGrand(37, 26, 168); // Doit afficher : "168"
echo '<br>';
echo plusGrand(2, -5, 0); // Doit afficher "2"
?>
<hr>
<?php
function dernierElementTableau( $mon_tableau = [] ) {
  if ( ! is_array( $mon_tableau ) ) {
    return null;
  }
  if ( sizeof( $mon_tableau ) == 0 ) {
    return null;
  }
  return $mon_tableau[ sizeof($mon_tableau) - 1 ];
}
$liste = ['pain', 'lait', 'riz'];
echo dernierElementTableau( $liste ); // Doit afficher : "riz"
echo '<br>';
$etudiants = ['paul', 'pierre', 'annie', 'jacques'];
echo dernierElementTableau( $etudiants ); // Doit afficher : "jacques"
?>
<hr>
<?php
function verificationMotDePasse( $mdp = '' ) {
  return ( strlen($mdp) > 7 ) ? true : false;
  /*
   * Equivaut à 
   */
  if ( strlen($mdp) > 7 ) {
    return true;
  }
  else {
    return false;
  }
}
echo( verificationMotDePasse('court') ); // Doit afficher : "false"
echo '<br>';
echo( verificationMotDePasse('motdepasseassezlong') ); // Doit afficher : "true"
?>
<hr>
<?php
function capitale( $paysChoisi = '' ) {
  switch ( $paysChoisi ) {
    case "France":
      return 'Paris';
      break;
    case "Allemagne":
      return 'Berlin';
      break;
    case "Italie":
      return 'Rome';
      break;
    case "Maroc":
      return 'Rabat';
      break;
    case "Espagne":
      return 'Madrid';
      break;
    case "Portugal":
      return 'Lisbonne';
      break;
    case "Angleterre":
      return 'Londres';
      break;
    default:
      return 'Inconnu';
      break;
  }
}
echo capitale('Espagne'); // Doit afficher : "Madrid"
echo '<br>';
echo capitale('Liban'); // Doit afficher : "Inconnu"
?>
<hr>
<?php
function listeHTML( $titre = '', $items = [] ) {
  if ( $titre == '' ) {
    return null;
  }
  if ( sizeof($items) == 0 ) {
    return null;
  }
  $html = '<h3>' . $titre . '</h3>';
  $html .= '<ul>';
  foreach( $items as $item ) {
    $html .= '<li>' . $item . '</li>';
  }
  $html .= '</ul>'; 
  return $html;
}
echo listeHTML('Capitales', ['Paris', 'Londres', 'Berlin', 'Madrid']);
echo listeHTML('Courses', ['Fraises', 'Lait', 'Biscottes', 'Pain']);
echo listeHTML('', ['Fraises', 'Lait', 'Biscottes', 'Pain']);
echo listeHTML('Courses');
?>
<hr>
<?php
function acronyme( $terme = '' ) {
  $motsExclus = ['à', 'de', 'des', 'le' /* ... */];
  $mots = explode(' ', $terme);
  $abbreviation = '';
  foreach($mots as $mot) {
    if ( ! in_array($mot, $motsExclus) ) {
      $abbreviation .= strtoupper( substr($mot, 0, 1) );
    }
  }
  return '<abbr title="' . $terme . '">' . $abbreviation . '</abbr>';
}
echo acronyme('Société nationale des Chemins de fer'); 
// retourne : <abbr title="Société Nationale des Chemins de Fer">SNCF</abbr>