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.

Icône de calendrier
Intermédiaire
12 chapitres

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 :

  1. 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).
  2. 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.).

copié !
// 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.).

copié !
require("folder/file.php");

Cas d’usage

Considérons les 3 fichiers .php suivants :

partials/_header.php
<header>
	...
</header>
partials/_footer.php
<footer>
	...
</footer>
data/getProducts.php
// 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().

index.php
copié !
<?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>