Faire le quiz close

Inclure des fichiers en PHP 8

#1 Pourquoi inclure des fichiers ? open

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 fichier footer.php qui contient un pied de page avec un copyright. Les deux fichiers sont inclus dans ma-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 😉.

    ma-page.php construite avec des include
  • 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 fichier module.php rend la variable $message visible dans le fichier ma-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 🙂.

#2 Comment inclure des fichiers ? open

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 retournent 1 en cas de succès et FALSE 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 le require_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 et require_once ne laisseront pas faire et rendront impossible plusieurs inclusions du même fichier.
  • include et require 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)