Sommaire

Apprendre PHP - Les Bases

Objectifs

Pré-requis

Pour commencer à apprendre le PHP, vous devez avoir des connaissances de base en HTML et CSS, car le PHP est généralement utilisé pour améliorer les fonctionnalités des pages Web et est souvent intégré directement dans le code HTML. Il est également utile d'avoir une certaine familiarité avec les concepts de programmation tels que les variables, les boucles et les instructions conditionnelles.

Points non couverts par le syllabus

Sommaire

  1. Objectifs
  2. Pré-requis
  3. Points non couverts par le syllabus
  4. Sommaire
    1. Introduction théorique à PHP
      1. PHP ? C'est quoi ?
        1. Histoire
      2. Qu'est-ce qu'un fichier PHP ?
      3. Pages statiques vs pages dynamiques
      4. Pages dynamiques et PHP
    2. Introduction pratique à PHP
      1. Ouvrir un fichier PHP sur le navigateur
      2. Serveur Web Local (Web Server Solution Stack)
        1. Quel stack installer ?
          1. Installation pour Windows
          2. Installation pour Mac OS
          3. Installation pour Linux
      3. Lancement du serveur
        1. Racine du serveur web ? C'est quoi ?
        2. Localhost
          1. Détail de la requête
        3. Création d'un sous-dossier personnalisé
          1. Retour du serveur
      4. Création d'un script
        1. Affichage du répertoire dans l'éditeur de code
        2. Affichage du script index.php dans le navigateur
      5. Syntaxe basique
        1. Script simple
        2. Script intégré
        3. Commentaires
      6. Variables
        1. Déclaration
        2. Types
          1. Int & float
          2. String
          3. Array
          4. Boolean
      7. Outputs
        1. echo
          1. Afficher du texte
          2. Afficher des variables
        2. print
          1. Afficher du texte
          2. Afficher des variables
      8. Opérateurs
        1. Opérateurs arithmétiques
        2. Opérateurs d'assignation
          1. Opérateur d'assignation arithmétiques
        3. Opérateurs d'incrémentation/de décrémentation
        4. Opérateurs de comparaison
        5. Opérateurs logiques
      9. Stuctures de contrôle
        1. Instruction conditionnelle
          1. if
          2. if-else
          3. elseif/else if
          4. switch
        2. Boucles/Loops
          1. while
          2. do...while
          3. for
          4. foreach
        3. Require & Require_once
          1. require vs require_once
      10. Functions
        1. Fonctions prédéfinies
        2. Fonctions personnalisées
          1. Arguments
          2. Return
    3. Super-globales
      1. $_GET vs $_POST
      2. Récupérer des infos depuis un formulaire HTML
        1. GET
          1. Détail de la requête
        2. POST
    4. Headers
  5. Infos supplémentaires
    1. Templates de chaînes de caractères
  6. Notes de base de page

Introduction théorique à PHP

PHP ? C'est quoi ?

En termes simples, c'est un language de programmation étant destiné à gérer le back-end d'une application web.

Histoire

PHP a été créé par Rasmus Lerdorf, et est apparu pour la première fois en 1995.

Lorsque Rasmus Lerdorf l'a créé, PHP signifiait à l'origine "Personal Home Page". Cependant, au fil du temps, le langage a évolué et le nom aussi. De nos jours, il est connu sous le nom de PHP : Hypertext Preprocessor.


Qu'est-ce qu'un fichier PHP ?

PHP a été créé comme un langage de script pour les pages HTML, il n'a jamais perdu sa capacité à s'associer facilement aux documents HTML pour créer du contenu dynamique pour le Web.


Pages statiques vs pages dynamiques

Une page statique et une page écrite directement en HTML. Elle peut éventuellement incorporer du code Javascript lui donnant un semblant de dynamisme mais uniquement du côté du navigateur et des données locales.

Pour des traitements plus lourds nécessitant l'accès à une base de données, un formatage de tableau en fonction de résultats, une recherche poussée, du graphisme, il faut passer par des pages dynamiques et par un langage qui sera exécuté du côté du serveur. (Dans notre cas, PHP)


Pages dynamiques et PHP

PHP est un langage côté serveur. Lors du chargement d'une page PHP, le serveur va lire, interpréter et exécuter le code. Puis il renvoie le résultat, généralement sous la forme de code HTML au navigateur. Ainsi le navigateur et l'utilisateur ne voient jamais le véritable code PHP exécuté.


Introduction pratique à PHP

PHP est un langage qui s'inspire de plusieurs autres, dont C, Perl et C++.

Il est donc possible d'écrire du PHP avec plusieurs styles d'écriture (comme la programmation procédurale[^3] traditionnelle ou la programmation orientée objet[^4]).

C'est pour cela que la structure et la propreté du code sont primordiales pour éviter de se perdre dans le code.

Pour le prochain chapitre, nous allons avoir besoin d'un fichier .php basic. Veuillez le télécharger via le lien ci-dessous:

Télécharger la base de travail

Ouvrir un fichier PHP sur le navigateur

Une fois que le fichier index.php a été téléchargé, on peut essayer de l'ouvrir dans un navigateur.

Overture de fichier PHP sans serveur

Comme on peut le voir sur l'image ci-dessus, lorsqu'on essaye d'ouvrir le fichier index.php dans le navigateurn, le code source de ce fichier nous est renvoyé.

Le navigateur ne comprend pas le contenu du fichier index.php.

En effet, plus haut nous avions vu que PHP est un langage côté serveur, il nous faut donc un serveur qui va lire, interpréter et exécuter le fichier avant de retourner du code HTML au navigateur.


Serveur Web Local (Web Server Solution Stack)

Pour comprendre ce qu'est un serveur web local, il est important de comprendre ce que chaque terme veut dire:

En connaissant le sens des ces différents mots, on peut déduire qu'un serveur web local est un logiciel installé sur votre poste de travail qui lui permet de fonctionner (dans certaines limites) comme un serveur web.

Quel stack installer ?

Dans notre cas, nous allons installer XAMPP, car il peut être installé sous n'importe quel OS et dispose déjà de tous les outils dont nous allons avoir besoin pour créer des pages web dynamiques.

Lettre Signification
X Une lettre idéographique faisant référence à l'expression "multiplateforme".
A Apache, ou sa forme étendue, Apache HTTP Server.
M MariaDB (anciennement MySQL).
P PHP.
P Perl.

Lien de téléchargement XAMPP: https://www.apachefriends.org/download.html

Installation pour Windows

Article: Comment installer XAMPP pour Windows

Vidéo: Comment télécharger et installer XAMPP sur Windows 10

Installation pour Mac OS

Article: Installation de XAMPP

Vidéo: Comment installer Xampp sur Mac OSX

Installation pour Linux

Cherchez l'article/la vidéo correspondant à votre distribution et version de Linux par vous même. 😛


Lancement du serveur

Afin d'afficher le contenu de notre page index.php nous allons commencer par lancer le serveur Apache[^5] via l'interface de XAMPP.

Mise en évidence du bouton à appuyer pour lancer le serveur

Appuyer sur le bouton start dans la rangée du module Apache pour lancer le serveur.

Mise en évidence du lancement du serveur

Lorsque le module Apache est surligné en vert, cela indique que le serveur est en ligne.

Dans la colonne Port(s)[^6] on peut voir les nombres 80 et 443. Ces nombres représentent les ports ouverts pour les protocoles HTTP et HTTPS respectivement. On peut aussi partler de ces différents ports avec des alias[^7]. Le port utilisé par le protocole HTTP est aussi appelé le port HTTP et le port utilisé par les protocole HTTPS est aussi appelé le port SSL.

Les nombres choisis pour les ports sont le fruit de conventions. Il se peut que certains ports soient déjà utilisés sur le réseau, il faut alors choisir d'autres ports. On peut utiliser l'outil Netstat de XAMPP pour lister tous les ports déjà utilisés.

Mise en évidence du bouton netstat sur l'interface XAMPP
Racine du serveur web ? C'est quoi ?

Lorsqu'on parle de racine on pense directement a un arbre, une plante, ... Dans notre cas, la racine du serveur web est un dossier où sont stockés les fichiers/sous-dossiers d'un site web. Avec le temps ce dossier pourra être représenté sous forme d'arborescence[^8].

Pour XAMPP, le dossier de racine du serveur web est nommée htdocs et est localisée sur: installation_disk:\xampp (ex. C:\xampp\htdocs)

On peut essayer de voir ce qu'il y a dans ce dossier directement sur le navigateur. En entrant le mot clé localhost dans la barre d'adresse d'un navigateur web. Le mot localhost est un alias pour l'adresse IP 127.0.0.1 qui est une adresse IP de "loopback".

⚠️: Tout ce que vous devez retenir c'est que vous pouvez accéder au dossier htdocs en utilisant l'adresse IP 127.0.0.1 ou son alias localhost dans la barre d'addresse de votre navigateur

Localhost

Lorsque l'on recherche localhost dans la barre d'addresse, la recherche se transforme en http://localhost/dashboard.

En réalité, la recherche ne se transforme pas vraiement, le comportement par défaut d'un serveur Apache est de lire, interpréter et exécuter le code se trouvant dans un fichier nommé index.php à l'addresse demandée.

En effet, on trouve bien un fichier index.php à la racine du serveur web (dossier DISKNAME://xampp/htdocs).

Le fichier index.php contient un script de redirection[^9]. C'est pour cela que l'url que l'on entre, change. On est donc redirigé vers le dossier /dashboard se trouvant lui-même dans le dossier /htdocs.

Découpons cette URL:

Protocole Délimiteur de protocole Nom de domaine Indicateur de répertoire Sous-Dossier
http :// localhost / dashboard
Détail de la requête
Création d'un sous-dossier personnalisé

Nous pouvons créer de nouveaux sous-dossiers dans le répertoire racine du serveur afin d'herberger nos sites/applications dynamiques.

Pour se faire, on va tout simplement créer un nouveau dossier dans le répertoire racine du serveur:

Création d'un nouveau répertoire dans la racine du serveur

Nous pouvons dès lors accéder au répertoire depuis notre navigateur web avec l'url suivante: localhost/NOM_DU_RÉPERTOIRE.

Dans mon cas, localhost/cours-php.

Retour du serveur

Le serveur nous renvois un explorateur de fichiers sur le navigateur car il ne voit pas de fichier à lire dans le répertoire.

Explorateur de fichiers sur le navigateur

Création d'un script

Rappel: Les fichiers PHP ont pour extension: .php.

Une page PHP peut ne contenir que du script PHP ou un mélange d'HTML et de script PHP (Script intégré).

Maintenant que l'on a notre arborescence de dossiers, on peut créer notre premier fichier de script dans le sous dossier que l'on a créé à l'étape précédante.

Création du fichier index.php dans le répertoire créé lors de la dernière étape

Il est important que le premier script soit nommé index.php pour qu'il soit lu dès que le serveur accède au répertoire dans lequel il se trouve.

Une fois que le script est créé, on peut ouvrir le répertoire dans notre éditeur de code (DISKNAME://xampp/htdocs/cours-php) et dans le navigateur web (localhost/cours-php).

Affichage du répertoire dans l'éditeur de code
Affichage du répertoire et du contenu du fichier dans l'éditeur de code

Nous n'avons encore rien écrit sur le script PHP.

Affichage du script index.php dans le navigateur
Affichage du script index.php dans le navigateur

Comme on pourrait s'y attendre, il n'y a rien d'affiché sur la page car on ne donne aucune instruction au serveur. Remarquez qu'il n'y a même pas d'erreur. (Une page sans contenu n'est pas considérée comme une erreur).


Syntaxe basique

Script simple

Comme cité plus tôt, une page PHP peut ne contenir que du script PHP. Pour se faire, il faut ouvrire une balise de script PHP. Cette balise est primordiale, le code sera traité comme du texte HTML si elles n'est pas présente. La balise permet au serveur de différencier le script PHP et les balises HTML.

La balise php est composée de deux parties: une ouverture de balise et une fermeture.

 <?php//balise d'ouverture de script PHP
   // ... Script à exécuter
 ?>// balisede de fermeture de script PHP

Remarque: la balise de fermeture de script n'est pas obligatoire lorsque la page PHP ne contient que du script.

Script intégré

Pour combiner de l'HTML et du script PHP c'est assez simple. On commence par la structure de base d'une page HTML et on y ajoute des balises de script PHP là où on en a besoin.

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Index.php</title>
  </head>
  <body>
   <?php//balise d'ouverture de script PHP
   // ... Script à exécuter
   ?>// balisede de fermeture de script PHP
   <body>
 </html>
Commentaires

Les commentaires sont des explications ou annotations lisible par le programmeur dans le code source d'un programme. Ils ne sont pas lus par le serveur.

PHP supporte les styles de commentaires des languages C, C++ et Perl. Il existe plusieurs types de commentaires:

Les commentaires one-line peuvent s'écrire avec deux préfixes: "//" et "#". C'est deux prefixes permettent de créer un commentaire sur une ligne.

<?php
// Ceci est un commentaire sur une ligne

# Cela aussi

Les commentaires multi-line s'écrivent avec une ouverture et une fermeture de zone de commentaires. Les commentaires multi-line ressemblent beaucoup aux commetaires en CSS et JavaScript.

<?php
/* Ceci est
         un commentaire
      sur plusieurs
lignes */

Variables

Comme dans de nombreux language de programmation, PHP dispose de variables. Ce sont des contenurs d'informations.

PHP est un langage à typage dynamique, ce qui signifie que par défaut, il n'est pas nécessaire de spécifier le type d'une variable, car il sera déterminé au moment de l'exécution du script.

Déclaration

En PHP les variables sont déclarés avec le sign $.

Les variables sont sensibles à la casse[^11]. Un nom de variable valide commence par une lettre ou un trait de soulignement, suivi d'un nombre quelconque de lettres, de chiffres ou de traits de soulignement.

<?php
$var = 'Bob';
$Var = 'Joe';
echo "$var, $Var";      // retourne "Bob, Joe"

$4site = 'url';         // invalide ; commence par un chiffre
$_4site = 'url';        // valide ; commence par un underscore
$täyte = 'mansikka';    // valide ; 'ä' est un code ASCII 228 (étendu)
Types

PHP supporte au total huit types de données primitives. Ces types de données sont utilisés pour construire des variables.

Type Signification
null La valeur spéciale NULL est utilisée pour représenter les variables vides en PHP.
boolean N'a que deux valeurs possibles, true (vrai) ou false (faux).
int C'est un nombre entier, sans virgule, positifs ou négatifs.
float C'est un nombre réel, positifs ou négatifs , avec virgules, fractions...
string C'est une chaîne de caractères.
array Variable pouvant contenir plus d'une valeur à la fois.
object Stocke des valeurs de plusieurs types ensemble. (aka Class)
resource Variable spéciale, contenant une référence à une ressource externe.

Le type des variables que l'on va créer est déterminé lors de l'execution du code. Il faut alors faire attention à la façon de déclarer et d'assigner une valeur à une variable.

En effet, la déclaration et l'assignation d'une valeur à une variable peut légerement changer en fonction du type de variable que l'on va créer.

Int & float

Voilà, comment déclarer des variables de type numérique. Dans l'exemple ci-dessous, on utilise un opérateur arithmétique pour effectuer des calculs.

On parlera des opérateurs arithmétiques plus tard.

<?php
$entier = 12; // Entier
$reel = -5.1; // Réel

$resultat = $entier + $reel; // $resultat =  6.9
String

Pour déclarer une variable de type string, il faut encapsuler la valeur entre des guillemets - simples '' ou doubles "".

Il existe un opérateur de concaténation . pour les variables de type string. Il permet de mettre des chaînes de caractère ou des variables de type string bout à bout.

<?php
$mot1 = "Hello"; // Guillemets doubles
$mot2 = 'World'; // Guillemets simples

$phrase = $mot1 . " " . $mot2; // $phrase = "Hello World"
Array

En PHP les tableau sont indexés à 0, c'est à dire qu'on commence à compter le nombres d'éléments à partir de 0. Les premier élément du tablea est en fait l'élément à l'index 0.

Il y a plusieurs types de tableau en PHP:

Type Description
Tableau numérique Tableau avec un index numérique.
Tableau associatif Tableau ossociant un string à une valeur.
Tableau multidimentionnel Un tableau contenant un ou plusieurs tableaux.
<?php
//-------------------------------
// Tableau numériques
//-------------------------------

// Notation longue
$tableau = array(1, 2, 3, 4, 5);

// Notation raccourcie
$tableau = [1, 2, 3, 4, 5];


//-------------------------------
// Tableau associatif
//-------------------------------

// Notation longue
$tableau = array(
    "foo" => "bar",
    "bar" => "foo",
);

// Notation raccourcie
$tableau = [
    "foo" => "bar",
    "bar" => "foo",
];


//-------------------------------
// Tableau multidimentionnel
//-------------------------------

// Notation longue
$tableau = array(
   array("Nom 1", "Prénom 1"),
   array("Nom 2", "Prénom 2"),
   array("Nom 3", "Prénom 3"),
   array("Nom 4", "Prénom 4"),
   array("Nom 5", "Prénom 5"),
);

// Notation raccourcie
$tableau = [
   ["Nom 1", "Prénom 1"],
   ["Nom 2", "Prénom 2"],
   ["Nom 3", "Prénom 3"],
   ["Nom 4", "Prénom 4"],
   ["Nom 5", "Prénom 5"],
];
Boolean
<?php
$foo = true; // assigner la valeur true à $foo
$bar = false; // assigner la valeur true à $bar

Outputs

Il y a deux façons basiques de retourner des données au navigateur: echo et print

Les différences sont minimes : echo n'a pas de valeur de retour alors que print a une valeur de retour de 1 et peut donc être utilisé dans des expressions. echo peut prendre plusieurs paramètres (bien qu'une telle utilisation soit rare) alors que print peut prendre un seul argument. echo est marginalement plus rapide que print.

echo

La déclaration d'echo peut se faire avec ou sans paranthèses. On peut retourner plusieurs types de données au navigateur, même des balises HTML.

Afficher du texte
<?php
echo("<h1>Ce titre est généré par php</h1>"); // echo avec paranthèses

echo "<ul><li>"; // echo sans paranthèses
echo "L'ouverture est la fermeture d'une balise ne doit pas forcément se faire sur la même ligne";
echo "</li></ul>";
Afficher des variables
<?php
$mot1 = "Hello";
$mot2 = 'World';
$phrase = $mot1 . " " . $mot2;

$a = 5;
$b = 2;

echo "<h1>" . $phrase . "</h1>";
echo  "<var>" . $a . "</var> * <var>" . $b . "</var> = <var>" . $a * $b . "</var>";
print

La déclaration de print se fait exactement de la même façon qu'echo à la seule différence qu'on utilise le mot clé print au lieu d'echo.

Afficher du texte
<?php
print("<h1>Ce titre est généré par php</h1>"); // print avec paranthèses

print "<ul><li>"; // print sans paranthèses
print "L'ouverture est la fermeture d'une balise ne doit pas forcément se faire sur la même ligne";
print "</li></ul>";
Afficher des variables
<?php
$mot1 = "Hello";
$mot2 = 'World';
$phrase = $mot1 . " " . $mot2;

$a = 5;
$b = 2;

print "<h1>" . $phrase . "</h1>";
print  "<var>" . $a . "</var> * <var>" . $b . "</var> = <var>" . $a * $b . "</var>";

Opérateurs

Un opérateur est un caractère ou une suite de caractères qui représente une action ou un processus mathématique ou logique spécifique.

On utilise très souvent certains opérateurs en PHP afin de manipuler les données que l'on récupère d'une base de données, d'un utilisateur, ...

Il existe à peu près une douzaine de groupes d'opérateurs en PHP. Pour commencer nous n'allons survoler que 5 de ces groupes.

Opérateurs arithmétiques

Les opérateurs arithmétiques sont les plus simples à comprendre, on les utilise quasiment tous au quotidient.

Exemple Nom Opération
+$a Identité Conversion de $a en int ou float selon le cas.
-$a Négation Opposé de $a.
$a + $b Addition Somme de $a et $b.
$a - $b Soustraction Différence de $a et $b.
$a * $b Multiplication Produit de $a et $b.
$a / $b Division Quotient de $a et $b.
$a % $b Modulo Reste de $a divisé par $b.
$a ** $b Exponentiation Résultat de l'élévation de $a à la puissance $b.
Opérateurs d'assignation

L'opérateur d'assignation de base est le signe =, nous avons eu l'occasion de le voir plus haut.

Opérateur d'assignation arithmétiques

Souvent, lorsque l'on programme en PHP on a besoin d'additionner, de soustraire, ... la valeur d'une variable et réaffecter cette variable avec la valeur qui vient d'être générée.

Il est possible d'utiliser une expression raccourcie pour remplacer ces opérations:

Exemple Equivalent Opération
$a += $b $a = $a + $b Addition
$a -= $b $a = $a - $b Soustraction
$a *= $b $a = $a * $b Multiplication
$a /= $b $a = $a / $b Division
$a %= $b $a = $a % $b Modulus
$a **= $b $a = $a ** $b Exponentiation
Opérateurs d'incrémentation/de décrémentation

Les opérteurs d'incrémentation/de décrémentation permettent d'incrémenter ou de décrémenter une variable de un.

Il existe deux manières d'incrémentater/de décrémenter une variable:

Voici les différences entre les opérateurs de pre/post increment/decrement:

Exemple Nom Effet
++$a Pré-incrémentation Incrémente $a de un, puis retourne $a.
$a++ Post-incrément Renvoie $a, puis incrémente $a de un.
--$a Pré-décrémentation Décrémente $a de un, puis retourne $a.
$a-- Post-décrémentation Renvoie $a, puis décrémente $a de un.
Opérateurs de comparaison

Les opérateurs de comparaison permettent de comparer deux valeurs. Ils sont très souvent utilisés en PHP afin de vérifier des valeurs, contrôler des comportements en fonctions de situations, ...

Exemple Nom Résultat
$a == $b Égal true si $a est égal à $b après jonglage de type.
$a === $b Identique true si $a est égal à $b, et qu'ils sont du même type.
$a != $b Non égal true si $a n'est pas égal à $b après jonglage de type.
$a <> $b Non égal true si $a n'est pas égal à $b après jonglage de type.
$a !== $b Non identique true si $a n'est pas égal à $b, ou s'ils ne sont pas du même type.
$a < $b Inférieur à true si $a est strictement inférieur à $b.
$a > $b Supérieur à true si $a est strictement supérieur à $b.
$a <= $b Inférieur ou égal à true si $a est inférieur ou égal à $b.
$a >= $b Supérieur ou égal à true si $a est supérieur ou égal à $b.
$a <=> $b Spaceship Un rée inférieur, égal ou supérieur à zéro lorsque $a est inférieur, égal ou supérieur à $b, respectivement.

Les opérateurs de comparaison les plus utilisés en général sont égal, Non égal, inférieur à et supérieur à.

Opérateurs logiques

Un opérateur logique est un symbole, un groupe de symboles ou un mot utilisé pour connecter deux ou plusieurs expressions de telle sorte que la valeur de l'expression composée produite ne dépende que de celle des expressions d'origine et de la signification de l'opérateur.

Exemple Nom Résultat
$a and $b Et true si $a et $b sont tous deux true.
$a && $b Et true si $a et $b sont tous deux true.
$a or $b Ou true si $a ou $b est true.
$a | | $b Ou true si $a ou $b est true.
$a xor $b Ou Exclusif si $a ou $b est true, mais pas les deux.
! $a N'est pas si $a n'est pas true.

Stuctures de contrôle

Tout script PHP est construit à partir d'une série d'instructions. Une instruction peut être une affectation, un appel de fonction, une boucle, une instruction conditionnelle ou même une instruction qui ne fait rien (une instruction vide). Les instructions se terminent généralement par un point-virgule.

Instruction conditionnelle
if

La structure conditionnelle de base est composée de deux parties: une partie commençant par if pour décrire une situation possible et la seconde partie qui décrit la conséquence.

Lorsque l'on écrit un script, une structure conditionnelle permet une execution conditionnelle d'un fragment de code.

Il y a plusieurs façons d'écrire une instruction conditionnelle en PHP:

<?php
$a = 1;
$b = 2;

// Notation "classique"
if ($a > $b){
   echo $a . " est plus grand que " . $b;
}

// Notation par mot clés
if ($a > $b):
   echo $a . " est plus grand que " . $b;
endif;
if-else

Souvent, nous avons besoin d'exécuter une instruction si une certaine condition est remplie, et une autre instruction si la condition n'est pas remplie. C'est à cela que sert la clause else. else étend une instruction if pour exécuter une instruction dans le cas où l'expression de l'instruction if est évaluée comme false.

Reprennons l'exemple précédent pour visualiser les différentes façons d'écrire une clause else:

<?php
$a = 1;
$b = 2;

// Notation "classique"
if ($a > $b){
   echo $a . " est plus grand que " . $b;
} else {
   echo $b . " est plus grand que " . $a;
}

// Notation par mot clés
if ($a > $b):
   echo $a . " est plus grand que " . $b;
else:
   echo $b . " est plus grand que " . $a;
endif;
elseif/else if

elseif, comme son nom l'indique, est une combinaison de if et else. Comme else, elle étend une instruction if pour exécuter une autre instruction au cas où l'expression if d'origine serait fausse. Toutefois, contrairement à else, elle n'exécutera cette expression alternative que si l'expression conditionnelle elseif est évaluée comme true.

Remarque: Lorsqu'on écrit une instruction conditionnelle elseif avec des accolades, les mots clées elseif et else if sont des synonymes les uns des autres. Par contre, si l'instruction conditionnelle est écrité avec deux-points, le mot clé ne peut pas contenir d'espace, ou PHP retournera une erreur lors de la lecture.

<?php
$a = 1;
$b = 2;

// Notation "classique"
if ($a > $b){
   echo $a . " est plus grand que " . $b;
} else if ($a == $b){
   echo $b . " est égal à " . $a;
}else {
   echo $b . " est plus grand que " . $a;

}

// Notation par mot clés
if ($a > $b):
   echo $a . " est plus grand que " . $b;
elseif ($a == $b):
   echo $b . " est égal à " . $a;
else:
   echo $b . " est plus grand que " . $a;
endif;
switch

L'instruction switch est similaire à une série d'instructions ìf sur la même expression. Dans de nombreuses occasions, vous pouvez vouloir comparer la même variable (ou expression) avec plusieurs valeurs différentes, et exécuter un morceau de code différent en fonction de la valeur à laquelle elle est égale.

<?php
  $i = 1;

// Instruction switch:
switch ($i) {
    case 0:
        echo "i est égal à 0";
        break;
    case 1:
        echo "i est égal à 1";
        break;
    case 2:
        echo "i est égal à 2";
        break;
}

// Équivalent avec une instruction if:
if ($i == 0) {
    echo "i  est égal à 0";
} elseif ($i == 1) {
    echo "i est égal à 1";
} elseif ($i == 2) {
    echo "i est égal à 2";
}
Boucles/Loops

Une boucle est une séquence d'instructions qui est continuellement répétée jusqu'à ce qu'une certaine condition soit atteinte.

Il existe 4 types de boucles en PHP:

while

Boucle dans un bloc de code jusqu'à ce qu'une condition donnée est évaluée comme true.

<?php

// Notation "classique"
$i = 1;
while ($i <= 10) {
   echo $i;
   $i++;
}

// Notation par mot clés
$i = 1;
while ($i <= 10):
   echo $i;
   $i++;
endwhile;
do...while

Les boucles do...while sont très similaires aux boucles while, à la différence que la condition d'itération est vérifiée à la fin de chaque itération et non au début. La principale différence avec les boucles while normales est que la première itération d'une boucle do...while est garantie (la condition d'itération n'est vérifiée qu'à la fin de l'itération).

<?php
$i = 0;
// Une seule notation pour la boucle do...while
do {
    echo $i;
} while ($i > 0);
for

Les boucles for sont les plus complexes mais ce sont celles que l'on voit le plus souvent en PHP.

Une boucle for s'écrit comme cela:

for (expr1; expr2; expr3) {
   // instructions
}

Voici les différentes façons d'écrire une boucle for:

<?php
// Notation "classique"
for ($i = 1; $i <= 10; $i++) {
   echo $i;
}

// Notation par mot clés
for ($i = 1; $i <= 10; $i++):
   echo $i;
endfor;
foreach

L'instruction foreach fournit un moyen facile d'itérer sur des tableaux. foreach fonctionne uniquement sur les tableaux et les objets et émettra une erreur si vous essayez de l'utiliser sur une variable avec un type de données différent ou une variable non initialisée. Il existe deux syntaxes :

foreach (expression_itérable as $valeur){
   // instructions
}

foreach (expression_itérable as $clef => $valeur){
   // instructions
}

La première syntaxe parcourt l'expression itérable[^13]. À chaque itération, la valeur de l'élément actuel est affectée à $valeur.

La deuxième syntaxe (syntaxe déconstruite), en plus de faire tout ce que la première syntaxe fait, assigne la clé de l'élément actuel à la variable $clef à chaque itération. Cela permet de récupérer la clé et la valeur de l'élément actuel.

Voici les différentes façons d'écrire une boucle foreach avec la première syntaxe:

<?php
$tableau = array(1, 2, 3, 4);

// Notation "classique
foreach ($tableau as $valeur) {
   echo $valeur;
}

// Notation par mot clés
foreach ($tableau as $valeur):
   echo $valeur;
endforeach;

Voici les différentes façons d'écrire une boucle foreach avec la deuxième syntaxe (syntaxe déconstruite):

<?php
$tableau = array(
   "trois" => 3,
   "une" => 1,
   "quatre" => 4,
   "deux" => 2
);

// Notation "classique
foreach ($tableau as $case => $valeur) {
   echo $case . " est associé à " . $valeur;
}

// Notation par mot clés
foreach ($tableau as $case => $valeur):
   echo $case . " est associé à " . $valeur;
endforeach;
Require & Require_once

En PHP il est possible de séparer notre code en plusieurs fichiers distincts afin de moduliser notre projet.

La modulisation d'un projet permet de créer des modules indépenadants les uns des autres, de rendre la réutilisation de parties de code plus simple (différent d'une function) et de rendre la lecture de notre code plus simple.

require vs require_once

require permet d'inclure et d'exécuter un fichier spécifique (module) au sein d'un autre fichier.

<?php
require('helper_functions.php');

require_once permet la même chose que require mais s'assure que le fichier demandé ne soit pas inclut une deuxième fois au sein d'un même fichier.

<?php
require('helper_functions.php');
require('helper_functions.php'); // Retourne une `FATAL ERROR`
/*
Le fichier 'helper_functions.php' contient des déclarations
de fonctions. PHP ne permet pas la redéclaration de fonctions.
*/
<?php
require_once('helper_functions.php');
require_once('helper_functions.php'); // N'inclut pas le fichier une deuxième fois => pas d'erreur

Functions

Les fonctions PHP sont similaires à celles des aux autres langages de programmation. Une fonction est un morceau de code qui prend une entrée supplémentaire sous forme d'au moins un paramètre, effectue un traitement et renvoie une valeur.

Fonctions prédéfinies

PHP est livré avec de nombreuses fonctions par défaut. Nous en avons déjà vues deux, echo et print.

Voici quelques fonctions intéressantes supplémentaires:

Nom Description
count Retourne le nombre d'éléments dans un dénombrable (expression itérable).
strlen Retourne la longueur d'une chaîne de caractères.
is_array Retourne true si la variable est un tableau.
substr Retourne une partie d'une chaîne de caractères.
in_array Retourne true si une valeur existe dans un tableau.
mb_split Retourne un tableau contenant une chaîne de caractères découpée.
join Retourne une chaîne de caractères à partir d'un tableau.
sprintf Retourne une chaîne de caractères formatée.
rand Retourne une valeur numérique au hasard.
isset Déterminer si une variable est déclarée et si elle est différente de null.

Il existe une liste de tous les fonctions existant par défaut en PHP sur le site officiel du language.

Fonctions personnalisées

Comme dans beaucoup de languages de programmation, PHP nous permet de créer nos propres fonctions.

La syntaxe pour créer une fonction est la suivant:

<?php
function nomDeLaFonction($arg_1, $arg_2, $arg_x){
   // instructions
}
Partie de la déclaration Description
function Initie la déclaration d'une fonction personnalisée.
nomDeLaFonction Définit le nom de la fonction.
($arg_1, $arg_2, $arg_x) Liste des arguments utilisés par la fonction.
// instructions Instructions à exécuter à l'appel de la fonction.
Arguments

Des informations peuvent être transmises aux fonctions via la liste d'arguments, qui est une liste d'expressions délimitées par des virgules. Les arguments sont évalués de gauche à droite, avant que la fonction ne soit réellement appelée (évaluation rapide). Les arguments sont déclarés comme des variables (en utilisant le signe $).

Les information sont passées à la fonction lorsqu'elle est appelée:

<?php
$prenom = "Pierre";

function salut($prenom_user){
   echo "Hello " . $prenom_user . " !";
}

salut($prenom);
Return

Les valeurs sont renvoyées à l'aide de l'instruction facultative return. Tout type de valeur peut être retourné, y compris les tableaux et les objets. La fonction termine alors immédiatement son exécution et renvoie le contrôle à la ligne à partir de laquelle elle a été appelée.

Voici un example de situation où une fonction retourne une valeur:

<?php
$a = 5;
$b = 10;

function multiply($fact_1, $fact_2){
   return $fact_1 * $fact_2;
}

echo "Le résultat de la multiplication de " . $a . " et " . $b ." est " . multiply($a, $b);
// Le résultat de l'expression ci-dessus est => 'Le résultat de la multiplication de 5 et 10 est 50'

Super-globales

Les super-globales sont des variables intégrées qui sont toujours disponibles dans tous les scopes. Il n'y a donc pas besoin de les déclarer de manière globale avant leur utilisation.

Les super-globales sont écrites avec des caractères majuscules et commencent avec le signe trait de soulignement (sauf $GLOBALS).

Il y a 9 super-globales en PHP:

Nom Contenu
$GLOBALS Référence toutes les variables disponibles dans la portée globale.
$_SERVER Informations sur le serveur et l'environnement d'exécution.
$_GET Variables HTTP GET.
$_POST Variables HTTP POST.
$_FILES Variables de téléchargement de fichiers HTTP.
$_REQUEST Variables de la requête HTTP.
$_SESSION Variables de la session.
$_ENV Variables d'environnement.
$_COOKIE Cookies HTTP.

Les super-globales que l'on va le plus souvent utiliser sont $_GET et $_POST. Ce sont deux variables de type array (plus précisément: associative array).

Les raisons pour lesquelles nous allons beaucoup utiliser ces variables sont assez simples. C'est parce qu'elles permettent de récupérer des données envoyées par les utilisateurs.

En effet, lorsqu'un utilisateur envoie une série de données depuis un formulaire en HTML, ces données sont souvent traitées par PHP.

$_GET vs $_POST

La principale différence entre $_GET et $_POST est la manière dont les données sont envoyées et récupérées.

Lorsqu'un formulaire est soumis en utilisant la méthode GET, les données sont ajoutées à l'URL de la page de destination sous forme de paramètres de requête. Cela signifie que les données sont visibles dans l'URL et peuvent être facilement partagées ou bookmarkées. Cependant, la méthode GET a une limite de taille de données et n'est pas sécurisée, car les données peuvent être facilement modifiées ou interceptées.

Au contraire, lorsqu'un formulaire est soumis en utilisant la méthode POST, les données sont envoyées de manière cachée au serveur via le corps de la requête HTTP. Cela signifie que les données ne sont pas visibles dans l'URL et ne peuvent pas être facilement partagées ou bookmarkées. La méthode POST est généralement utilisée pour envoyer des données sensibles ou de grande taille et est considérée comme plus sécurisée que la méthode GET.

En résumé, la méthode GET est utilisée pour récupérer des données de manière visible et non sécurisée, tandis que la méthode POST est utilisée pour envoyer des données de manière cachée et sécurisée.


Récupérer des infos depuis un formulaire HTML

GET

Pour récupérer des informations d'un formulaire HTML en PHP en utilisant la méthode GET, vous devez d'abord créer un formulaire HTML en utilisant des éléments de formulaire tels que <input>, <select> et <textarea>. Chaque élément de formulaire contenant des données doit avoir un attribut name afin que vous puissiez récupérer les données en PHP.

Voici un exemple de formulaire HTML simple :

// Fichier: index.html
<form action="process.php" method="GET">
	<label for="username">Nom d'utilisateur:</label><br />
	<input type="text" id="username" name="username" /><br />
	<label for="age">Âge:</label><br />
	<input type="age" id="age" name="age" /><br /><br />
	<input type="submit" value="Envoyer" />
</form>
form_GET_inputs

Dans cet exemple, le formulaire a une action définie sur process.php et utilise la méthode GET pour envoyer les données. Le formulaire comprend également deux champs de saisie, username et age, qui ont tous deux un attribut name avec une valeur.

Pour récupérer les données du formulaire en PHP, vous devez d'abord vérifier si le formulaire a été soumis en utilisant la bonne méthode. Vous pouvez vérifier ça avec la super-globale $_SERVER['REQUEST_METHOD'] dans une structure de contrôle if. Si la méthode de soumission est GET, vous pouvez récupérer les données du formulaire en utilisant la super-globale $_GET.

Afin de récupérer les données contenues dans $_GET, il suffit de traiter cette variable comme un tableau associatif ... car ça en est un.

L'attribut name des <inputs> en HTML permet de déterminer le nom des clés dans le tableau associatif $_GET. Dans notre cas, $_GET possèdera deux clés username et age. On accède à leurs valeurs en utilisant des crochets [] contenant le nom des clés sous forme de string (Ex.: $_GET["username"]).

Voici un exemple de code PHP qui récupère les données du formulaire ci-dessus :

// Fichier: process.php
<?php
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
  $username = $_GET['username'];
  $age = $_GET['age'];

  echo "Nom d'utilisateur: " . $username . "<br>";
  echo "Mot de passe: " . $age;
}

Dans cet exemple, on vérifie si le formulaire a été soumis en utilisant la méthode GET. Si c'est le cas, il stocke les valeurs dans des variables puis affiche les valeurs de ces dernières à l'utilisateur.

Le navigateur nous retourne une nouvelle URL, découpons cette URL afin de mieux la comprendre:

Racine du serveur local Sous-dossier Fichier php Query string Paire clé-valeur Séparateur Paire clé-valeur
http://localhost /cours-php /process.php ? username=Olivier & age=37
Détail de la requête

Voilà ce qui est affiché sur la page du navigateur:

form_GET_return
POST

Comme avec la méthode GET, il faut un formulaire HTML dont les <input> ont un attribut name avec une valeur afin de pouvoir récupérer les informations envoyées depuis le formulaire.

Voici l'example de page HTML que l'on va utiliser avec la méthode POST:

// Fichier: index.html
<form action="process.php" method="POST">
	<label for="username">Nom d'utilisateur:</label><br />
	<input type="text" id="username" name="username" /><br />
	<label for="password">Mot de passe:</label><br />
	<input type="password" id="password" name="password" /><br /><br />
	<input type="submit" value="Envoyer" />
</form>
form_POST_inputs

Dans cet exemple, le formulaire a une action définie sur process.php et utilise la méthode POST pour envoyer les données au serveur. Le formulaire comprend également deux champs de saisie, username et password.

Ici aussi, nous allons vérifier si la méthode de soummission est correcte avant d'essayer de récupérer les données du formulaire en PHP. Pour récupérer les valeurs dans la super-globale $_POST, c'est le même procédé qu'avec la méthode GET. Il suffit juste de connaître les valeurs des attributs name du formulaire HTML.

Voici un exemple de code PHP qui récupère les données du formulaire ci-dessus :

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $username = $_POST['username'];
    $password = $_POST['password'];

    echo "Nom d'utilisateur: " . $username . "<br>";
    echo "Mot de passe: " . $password;
}
form_POST_return

Dans cet exemple, le code vérifie si le formulaire a été soumis en utilisant la méthode POST. Si c'est le cas, il stocke les valeurs dans des variables puis affiche les valeurs de ces dernières à l'utilisateur.

Le navigateur nous renvoie vers la page process.php mais n'affiche pas les valeurs des variables dans la barre d'url car les données sont cryptées[^14] en méthode POST.


Headers

Les en-têtes PHP sont un moyen d'envoyer des en-têtes HTTP à un client (généralement un navigateur Web) à partir d'un script PHP. Ils peuvent être utilisés pour définir le type de contenu, rediriger un client vers une autre URL ou lui envoyer un cookie.

Les en-têtes PHP sont définis à l'aide de la fonction header(). La fonction header() prend un argument de type string, qui spécifie l'en-tête à envoyer. Voici un example d'en-tête, pour définir le type de contenu comme "text/html":

<?php
header("Content-Type : text/html");

Remarque : Vous devez appeler la fonction header() avant d'envoyer toute autre sortie au client.

Certains en-têtes sont utilisés assez souvent:

Description Écriture
Définition du type de contenu de la page header("Content-Type : text/html");
Redirection d'un client vers une autre URL header("Location : http://www.example.com/");
Envoi d'un cookie à un client header("Set-Cookie: user=$_POST[email]; expires=Sun, 31-Dec-23 00:00:00 GMT;path=/; domain=yourdomain.com");

Remarques:


Infos supplémentaires

Templates de chaînes de caractères

Il est possible d'utiliser ce qu'on appelle des templates de chaînes de caractères pour faciliter l'écriture et la lecture d'un string en utilisant des guillemets doubles et des accolades. Les string templates permettent d'utiliser des variables directement dans la chaîne de caractères que l'on souhaite écrire.

Réécrivons une instruction echo écrite plus tôt dans le syllabus sous forme de string template:

<?php
// Concaténation
echo "Le résultat de la multiplication de " . $a . " et " . $b ." est " . multiply($a, $b);

// Templates de chaînes de caractères
echo "Le résultat de la multiplication de {$a} et {$b} est " . multiply($a, $b);

Comme nous pouvons le voir, l'instruction est plus facile à écrire et à lire.


Notes de base de page

[^1]: Un préprocesseur (ou précompilateur) est un programme qui traite des données d'entrée pour produire des données de sortie utilisées par un autre programme. ↩️

[^2]: WordPress est un système de gestion de contenu (SGC ou content management system (CMS) en anglais) gratuit, libre et open-source. ↩️

[^3]: Dans la programmation procédurale le programme est divisé en petites parties appelées procédures ou fonctions. Comme son nom l'indique, la programmation procédurale contient une procédure étape par étape à exécuter. ↩️

[^4]: La programmation par objet consiste à utiliser des techniques de programmation pour mettre en œuvre une conception basée sur les objets. ↩️

[^5]: Le logiciel libre Apache HTTP Server (Apache) est un serveur HTTP créé et maintenu au sein de la fondation Apache. ↩️

[^6]: Dans la suite des protocoles Internet et correspondant à la couche transport du modèle OSI, la notion de port logiciel permet, sur un ordinateur donné, de distinguer différents interlocuteurs. Ces interlocuteurs sont des programmes informatiques qui, selon le cas, écoutent ou transmettent des informations sur ces ports. Un port se distingue par son numéro. ↩️

[^7]: Alias est un adverbe qui permet d'introduire un surnom, un nom d'emprunt ou un pseudonyme. ↩️

[^8]: Une arborescence désigne alors généralement une organisation des données en mémoire, de manière logique et hiérarchisée, utilisant une structure algorithmique d'arbre. Cette organisation rend plus efficace la consultation et la manipulation des données stockées. ↩️

[^9]: La redirection est une technique permettant de déplacer les visiteurs vers une page Web différente de celle qu'ils demandent,... ↩️

[^10]: Un protocole est un ensemble de règles et de directives pour la communication de données. ↩️

[^11]: La casse des lettres est la distinction entre les lettres qui sont en majuscules et celles qui sont en minuscules. ↩️

[^12]: Procédé de calcul répétitif qui boucle jusqu'à ce qu'une condition particulière soit remplie. ↩️

[^13]: Attribut d'un objet sur lequel on peut effectuer une boucle ou une itération à l'aide d'une boucle. ↩️

[^14]: Méthode par laquelle l'information est convertie en un code secret qui dissimule la véritable signification de l'information.↩️

[^15]: Technique malveillante insérant du code indésirable dans un système, exploitant ses failles, altérant ou volant des données.↩️