Jusqu'ici on a tendance à tout écrire dans un seul fichier. Ça fonctionne pour de petits scripts, mais ça pose un problème dès qu'on veut réutiliser du code. Si on a défini une fonction repondre_oui_non() dans demo.php et qu'on souhaite l'utiliser dans un second script, on est obligé de la réécrire à l'identique. C'est exactement le genre de répétition que les fonctions sont censées éviter.
require et include résolvent ce problème en permettant d'inclure le contenu d'un fichier PHP dans un autre. Tout ce qui est défini dans le fichier inclus (variables, fonctions, classes) devient immédiatement accessible dans le fichier courant. Plus d'informations sur la documentation.
include et require
L'utilisation est simple : on écrit le mot-clé suivi du chemin vers le fichier à inclure.
La bonne pratique est de regrouper ses fonctions dans des fichiers dédiés. Par exemple, on peut créer un functions.php qui regroupe toutes les fonctions utilitaires du projet :
Si le fichier ne contient que du PHP, on ouvre la balise <?php mais on ne la ferme pas. Cela évite d'introduire des caractères parasites (espaces, sauts de ligne) en dehors des balises qui pourraient causer des problèmes, notamment avec les en-têtes HTTP.
Dans le script principal, on l'inclut en début de fichier et ses fonctions sont directement disponibles :
On peut aussi organiser le code par domaine fonctionnel. Par exemple, les fonctions liées aux créneaux horaires peuvent aller dans un fichier functions_creneau.php séparé, que l'on inclut ensuite depuis functions.php :
La différence entre les deux
include et require font la même chose, à une nuance près : leur comportement en cas d'erreur.
Si le fichier demandé n'existe pas :
requirelève une erreur fatale et stoppe immédiatement l'exécution du script. Rien de ce qui suit n'est exécuté.includeaffiche un warning mais le script continue de s'exécuter.
La règle est simple : si le fichier est indispensable au bon fonctionnement du script, on utilise require. Si son absence n'est pas bloquante, on peut se contenter d'un include.
Dans la pratique, require est presque toujours le bon choix. Il vaut mieux avoir une erreur franche qui indique clairement le problème plutôt qu'un script qui continue à tourner dans un état incohérent.
require_once et include_once
Il existe deux variantes supplémentaires : require_once et include_once. Comme leur nom l'indique, elles garantissent qu'un fichier n'est inclus qu'une seule fois, même si l'instruction est rencontrée plusieurs fois.
C'est utile pour éviter les erreurs de redéfinition. PHP ne permet pas de déclarer deux fonctions portant le même nom. Si un fichier contenant des définitions de fonctions est inclus deux fois, on obtient immédiatement une erreur :
Ce cas peut se produire sans qu'on s'en rende compte. Imaginons cette situation :
demo.phpfait unrequire 'functions.php'functions.phpfait lui-même unrequire 'functions_creneau.php'demo.phpfait ensuite un secondrequire 'functions_creneau.php'par inadvertance
Les fonctions de functions_creneau.php sont alors déclarées deux fois et PHP plante.
require_once règle le problème : si le fichier a déjà été inclus, l'instruction est simplement ignorée.
À l'inverse, si on veut qu'un fichier soit exécuté à chaque fois qu'on l'inclut, on utilise require sans _once.
Quand utiliser lequel ?
Pour choisir, on peut se poser deux questions dans l'ordre :
- Le fichier est-il indispensable ? Si oui,
require. Sinon,include. - Le fichier définit-il des fonctions ou des classes ? Si oui, ajouter
_oncepour éviter les erreurs de redéfinition. Sinon, la version sans_onceest suffisante.
Dans la grande majorité des projets PHP, require_once est l'instruction la plus utilisée pour charger des fichiers de fonctions ou de classes, car elle combine la sécurité du require (arrêt en cas d'absence du fichier) et la protection contre les redéfinitions du _once.