Inclure des fichiers en PHP 8
#1 Pourquoi inclure des fichiers ?
Il y a deux situations dans lesquelles il est utile d'inclure des fichiers :
-
La première situation, c'est lorsque l'on construit un site internet sans utiliser un framework et son moteur de template. Souvent la majorité des pages ont la même structure, avec sur chaque page, l'entête, le pied de page, la navigation. Dans ce cas, on met chaque partie (* entête, pied de page, navigation) dans un fichier séparé. Ensuite, pour chaque page, on fait l'inclusion des fichiers dont on a besoin. Ci-dessous, je montre un exemple ultra-classique 😃.
Vous avez un fichier
header.php
qui contient en entête le nom du site. Vous avez ensuite un fichierfooter.php
qui contient un pied de page avec un copyright. Les deux fichiers sont inclus dansma-page.php
. Si vous devez faire une autre page, eh bien, vous utilisez la même structure avec les mêmes fichiers à inclure. Si vous devez modifier les fichiers à inclure, eh bien, une seule modification suffit pour toutes les pages 😉. -
La deuxième situation, c'est lorsque l'on modularise un logiciel. Dans ce cas, le plus souvent un fichier devient un module. Dans ce fichier, on met une liste de fonctions ou une classe. Ensuite, lorsque l'on assemble l'application, on inclut l'ensemble des modules.
Ci-dessous, je modifie l'exemple précédent, j'ajoute un fichier
module.php
qui contient une variable$message
. Le fait d'inclure le fichiermodule.php
rend la variable$message
visible dans le fichierma-page.php
.Il faut voir ici deux choses :
- La première concerne le fait que la portée de la variable
$message
va dépendre de l'endroit où est fait l'include. Si l'include est fait dans l'environnement global d'un script, alors la portée est globale. Si l'include est fait dans l'environnement local d'une fonction, alors la portée est locale à la fonction. - La deuxième chose à voir c'est qu'on risque d'avoir des conflits de noms. Dans mon exemple, on pourrait avoir plusieurs variables
$message
qui soient déclarées dans plusieurs fichiers différents. On verra plus tard, que la solution est apportée en PHP par les espaces de noms 🙂.
- La première concerne le fait que la portée de la variable
#2 Comment inclure des fichiers ?
Pour inclure des fichiers, vous avez à disposition quatre instructions : include
, include_once
, require
, require_once
.
Pour ces quatre instructions, vous devez mettre l'emplacement du fichier à droite de l'instruction. L'emplacement, c'est ce que l'on appelle dans notre jargon le path.
Ci-dessous, 3 choses à savoir à propos du path :
- Il est possible de mettre le path du fichier entre parenthèses.
- Le path, peut-être exprimé en absolu ou en relatif.
- Vous pouvez ne pas mettre de path et définir dans la configuration
php.ini
une liste de path dans laquelle php cherchera les fichiers à inclure.
Ci-dessous, les différences à connaître par rapport au comportement en cas d'erreur (* si le fichier n'est pas trouvé).
- L'
include
et l'include_once
retournent1
en cas de succès etFALSE
en cas d'erreur. En plus, ces deux instructions déclenchent, en cas d'erreur, une simple erreur de type warning (* un message d'erreur qui n'interrompt pas le script.). - Le
require
et lerequire_once
ne retournent rien. En cas d'erreur, ces deux instructions déclenchent une erreur de type erreur fatale qui va interrompre le script.
Ci-dessous, qu'est-ce qui se passe si on essaie d'inclure plusieurs fois le même fichier ?
include_once
etrequire_once
ne laisseront pas faire et rendront impossible plusieurs inclusions du même fichier.include
etrequire
laisseront faire et il y aura probablement des erreurs.
Tout ce que je viens de dire ci-dessus est résumé dans le tableau ci-dessous 😃.
include include_once require require_once |
Le nom du fichier peut être donné en absolu ou en relatif |
include include_once |
Retourne 1 en cas de succès et FALSE en cas d'erreur |
require require_once |
Pas de code de retour |
include include_once |
Si erreur alors erreur de niveau warning |
require require_once |
Si erreur alors erreur fatale |
require_once include_once |
Pas d'inclusion multiple (* inclusion d'un fichier qui inclut un fichier déjà inclus) |