← Développement

PHP

Sommaire

1. Concepts de base

PHP (PHP: Hypertext Preprocessor) est un langage de script côté serveur, open source, conçu pour créer des pages web dynamiques.

HTMLPHP
Fichiers.html.php
Type de pagesStatiquesStatiques et dynamiques

Le code PHP inséré dans une page s'exécute à chaque chargement / rafraîchissement de la page (F5).

Cycle d'une page dynamique :

Action utilisateur → Requête HTTP → Traitement du PHP (serveur) → Affichage de la page

2. Syntaxe procédurale

Bloc de code

<?php
// mon code ici
?>

Peut être le seul contenu du fichier, ou mélangé à du HTML.

Afficher une valeur

<?php
echo "Bonjour tout le monde";
?>

Variables

$monNom = "Dupont";   // préfixées par $

Types de données

Constantes

define("TVA", 0.20);   // convention : nom en MAJUSCULES, valeur non modifiable

Opérateurs

+ - * / %      // arithmétiques
=              // affectation
&& / and       // ET logique
|| / or        // OU logique

Tableaux

$fruits = ["pomme", "poire", "banane"];      // tableau indexé (indice = int)
$personne = ["nom" => "Dupont", "age" => 30]; // tableau associatif (clé = string)

Structures conditionnelles

if ($nombre < 0) {
    echo "Négatif";
} elseif ($nombre == 0) {
    echo "Nul";
} else {
    echo "Positif";
}

switch ($operande) {
    case 1:
        echo "Un";
        break;
    default:
        echo "Autre";
}

Structures itératives

// Nombre d'itérations déterminé
for ($i = 0; $i <= 100; $i++) {
    echo $i;
}

// Nombre d'itérations indéterminé
$n = 100;
while ($n > 0) {
    echo $n;
    $n -= 2;
}

Fonctions utilisateur

function addition($a, $b) {
    return $a + $b;   // return arrête l'exécution et renvoie la valeur
}

Inclusion de fichiers

include 'header.php';       // avertissement si absent, poursuit l'exécution
include_once 'header.php';  // évite les doublons d'inclusion
require 'config.php';       // erreur fatale si absent, arrête le script
require_once 'config.php';

Un fichier inclus peut contenir du HTML, du PHP, ou les deux ; le HTML est intégré tel quel dans la page envoyée au navigateur. include_once / require_once sont recommandés pour les fichiers de constantes/fonctions, afin d'éviter les redéclarations.

3. Syntaxe orientée objet (POO)

Visibilité des attributs/méthodes

VisibilitéAccès
publicDepuis n'importe où
protectedDepuis la classe et ses classes filles
privateDepuis la classe elle-même uniquement

Constructeur / destructeur

class Personne {
    public function __construct($nom, $prenom) {
        $this->nom = $nom;
        $this->prenom = $prenom;
    }

    public function __destruct() {
        // libère des ressources — méthode facultative
    }
}

$p = new Personne("Dupont", "Marie");

Méthodes magiques

Méthodes au nom réservé, appelées automatiquement par PHP dans certains contextes : __construct(), __destruct(), __get(), __set(), __isset(), __unset(), __call(), __callStatic(), __toString(), __sleep(), __wakeup(), __serialize(), __unserialize()

4. Manipulation de fichiers

Fichiers plats / CSV

// Lecture ligne à ligne
$monFichier = fopen('./liste.csv', 'r');
while (!feof($monFichier)) {
    $ligne = fgetcsv($monFichier);
    // traitement de $ligne (tableau)
}
fclose($monFichier);

// Écriture (ajout en fin de fichier)
$monFichier = fopen('./liste.csv', 'a');
fwrite($monFichier, "valeur1;valeur2\n");
fclose($monFichier);

Fichiers XML — l'API DOM

$monXML = new DomDocument();
$monXML->load('fichier.xml');

$racine = $monXML->documentElement;   // élément racine
$liste  = $racine->getElementsByTagName('groupe'); // DomNodeList
ClasseRôle
DomDocumentReprésente le document XML entier (load(), documentElement)
DomNodeListListe de nœuds (length, item(index))
DomNodeUn nœud (nodeName, nodeValue)
DomElementUn élément (getAttribute(), setAttribute())
DomAttrUn attribut (name, value)

Étapes de lecture : déclarer l'objet DomDocument → charger le fichier → parcourir l'arbre.

5. Formulaires côté PHP

// Méthode GET (visible dans l'URL, taille limitée)
// maPage.php?classe=SIO1&lycee=EllaFitzgerald
$classe = $_GET['classe'] ?? '';

// Méthode POST (corps de la requête, taille illimitée)
$nom = $_POST['nom'] ?? '';

// Toujours tester l'existence du paramètre avant de l'utiliser
if (isset($_POST['nom'])) {
    echo $_POST['nom'];
}

6. Accès aux bases de données — PDO

Modalités d'accès existantes : natif (MySQLi), ODBC, SQLite embarqué, PDO (API commune à plusieurs SGBD — la plus utilisée).

Requête directe vs requête préparée : dans une requête préparée, le SGBD compile la requête à l'avance et les valeurs sont injectées séparément → protection contre les injections SQL.

// 1. Connexion
$cnx = new PDO('mysql:dbname=' . BDD . ';host=' . HOST . ';port=' . PORT, LOGIN, PASSW);

// 2. Préparation de la requête (paramètres sécurisés avec :nom ou ?)
$req = $cnx->prepare("SELECT * FROM candidat WHERE numCandidat = :id");
$req->execute(['id' => $idRecherche]);

// 3. Récupération du résultat
$ligne = $req->fetch();          // une seule ligne
$toutes = $req->fetchAll();      // toutes les lignes

Gestion des erreurs — try/catch

try {
    $cnx = new PDO('mysql:dbname=' . BDD . ';host=' . HOST, LOGIN, PASSW);
} catch (PDOException $e) {
    echo "Erreur de connexion : " . $e->getMessage();
}

try / catch permet de récupérer et traiter les événements extérieurs qui perturberaient l'exécution normale du script.

7. Sessions PHP

Une session correspond à la période de navigation continue d'un utilisateur sur un site : elle permet de conserver des variables d'une page à l'autre.

// Toujours en tout premier, avant tout affichage
session_start();

// Création / écriture d'une variable de session
$_SESSION['maVariable'] = $valeur;

// Lecture
echo $_SESSION['maVariable'];

// Destruction de la session
session_destroy();

Les 3 étapes d'une session :

  1. Création : le visiteur arrive, le serveur Apache génère un espace de stockage et un identifiant de session.
  2. Exploitation : on peut créer autant de variables $_SESSION[...] que nécessaire.
  3. Destruction : à la déconnexion, Apache détruit toutes les variables de session créées.

8. Framework Laravel

Notions préalables

NotionDéfinition
Framework (cadriciel)Agrégat organisé et cohérent de composants logiciels, apportant une structure au développement
Middleware (intergiciel)Logiciel qui crée un réseau d'échange entre différents composants/logiciels
MVCPatron d'architecture : Modèle (données), Vue (affichage), Contrôleur (cohérence entre les deux)
NamespaceEspace de noms, évite les collisions entre classes/fonctions de même nom
ComposerGestionnaire de dépendances PHP (fichier composer.json)

Laravel est un framework PHP orienté objet, respectant l'architecture MVC, distribué sous licence libre MIT.

Installation

Se fait via un environnement de développement local dédié (ex. Laragon) + Composer pour gérer les dépendances du projet.

Arborescence MVC

app/...                      → Modèles
resources/views/...          → Vues
app/Http/Controllers/...     → Contrôleurs
routes/web.php               → Routes

Routes

// routes/web.php
Route::get('/eleves/{classe}', [EleveController::class, 'index'])->name('eleves.index');

// Regrouper des routes qui partagent les mêmes contrôles
Route::group(['middleware' => 'auth'], function () {
    // ...
});

Contrôleurs

// Dans le contrôleur
use App\Models\MonModele;

public function index($classe)
{
    $donnees = MonModele::all();
    return view('eleves.index', ['donnees' => $donnees, 'classe' => $classe]);
}

Vues — moteur de template Blade

@extends('layouts.app')

@section('contenu')
    <p>Bonjour {{ $prenom }}</p>
    @php
        $total = 10 + 5;
    @endphp
@endsection

Blade repose sur Bootstrap et reste simple d'utilisation ; @extends gère l'héritage de template, @php ... @endphp permet d'insérer du PHP classique.

Modèles & migrations

// Migration : gestion incrémentale de la structure de la BdD
public function up()
{
    Schema::create('eleves', function (Blueprint $table) {
        $table->id();
        $table->string('nom');
    });
}

// Insertion
$monAjout = App\Models\MonModel::create(['nom' => 'Clerc']);

// Recherche
$maDonnee = App\Models\MonModel::find($monId);