Apprendre PHP & MySQL : Inclusions
Pour dynamiser un site web, PHP offre la mécanique d'inclusion, permettant de lier templates et scripts définis dans des fichiers distincts.
Fichiers d’un projet
Un site web est constitué de deux grands types de fichiers : les templates et les scripts.
Templates
Les templates désignent l’ensemble des fichiers HTML (on parle aussi de « vues ») d’un site web.
On distingue les templates en 3 familles :
Le layout
Il s’agit du template principal d’un site web contenant les balises de premier niveau (<html>
, <head>
et <body>
) et le style commun du site web (header, footer…).
Les pages
Sans surprises, elles contiennent le code HTML propre à chaque page du site web.
Les templates parts
Aussi appelés « partials », ils contiennent des portions de code HTML factorisées (header, footer, sidebar…), souvent réutilisées sur plusieurs pages. Par convention, on préfixe généralement un partial d’un _
.
Scripts
Un script est une portion de code PHP (ou tout autre langage de programmation) qui implémente une fonctionnalité bien précise.
Un script peut par exemple :
- Enregistrer des informations en base de données
- Envoyer un e-mail
- Enregistrer une image sur le serveur
- Lire un document PDF
- Etc.
Problématique : duplication de code
Avant de vous former à PHP, vous avez forcément créé des sites statiques. Vous avez alors probablement constaté un problème majeur : il est difficile de respecter le principe du DRY (Dont Repeat Yourself) et nous sommes régulièrement contraints de dupliquer du code (templates et scripts) d’une page à l’autre.
Bonne nouvelle ! Ce temps est révolu. Grâce à PHP, nous allons enfin pouvoir factoriser notre code. Cela présente 2 avantages majeurs :
- Dans le cas où le template / script n’est utilisé qu’une fois, l’isoler simplement dans un fichier dédié. Cela contribue à respecter un découpage propre de l’architecture de son projet (dossier et fichiers).
- Dans le cas où le fichier est appelé depuis plusieurs autres fichier, le factoriser pour éviter de le dupliquer et ainsi respecter le principe du DRY. Cela améliore grandement la maintenabilité du site.
Inclusion de templates
Pour inclure un template ou un script au sein d’un autre fichier, de sorte à les lier, on fait appel aux fonctions PHP include()
, include_once()
, require()
ou encore require_once()
. Ces fonctions peuvent aussi bien être utilisées sous forme d’expression, comme l’expression echo
(sans parenthèses).
Inclusion permissive
La fonction include()
permet de spécifier un chemin absolu ou relatif vers un fichier à inclure. Si ce chemin n’est pas valide, alors PHP renverra un warning, mais l’application continuera de s’exécuter normalement.
Elle est à privilégier pour l’inclusion de fichiers non “vitaux” pour le bon fonctionnement de la page web (cf. template parts comme : menu, footer, etc.).
// Equivalent : include "folder/file.php";
include("folder/file.php");
Inclusion stricte
La fonction require()
permet de spécifier un chemin absolu ou relatif vers un fichier à inclure. Si ce chemin n’est pas valide, alors PHP renverra une erreur qui arrête l’exécution de l’application.
Elle est à privilégier pour les fichiers « vitaux » pour le bon fonctionnement du site web (cf. scripts comme : interactions avec la BDD, fonctionnalité de la page, classe PHP, etc.).
require("folder/file.php");
Cas d’usage
Considérons les 3 fichiers .php
suivants :
<header>
...
</header>
<footer>
...
</footer>
// Ici, un script qui récupère des données dans une base de données...
Comme un extrait de code vaut mieux que 1000 mots, voici un petit cas d’usage illustrant l’utilisation des fonctions include()
et require()
.
<?php require("data/getProducts.php"); ?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Accueil - Mon super site</title>
</head>
<body>
<?php include("partials/_header.php"); ?>
<main>
<h1>Mon super site</h1>
<p>Lorem ipsum dolor sit amet...</p>
</main>
<?php include("partials/_footer.php"); ?>
</body>
</html>