Require_once vs Include dans PHP

Olorunfemi Akinlua 30 janvier 2023
  1. Quand utiliser les mots clés include ou require en PHP
  2. Quand utiliser les mots clés require_once ou include en PHP
Require_once vs Include dans PHP

Pour les développeurs, pendant le cycle de développement, nous séparons différents fichiers PHP dans notre répertoire de développement ou de production, mais nous pouvons avoir besoin d’une fonction ou d’une classe dans un autre fichier PHP. Il serait contre-intuitif et contraire à l’approche DRY de répéter cette même classe ou fonction dans un autre fichier.

Par conséquent, PHP dispose de quatre mots-clés pour ajouter ou donner accès au contenu d’un autre fichier PHP, include, require, include_once et require_once. Dans cet article, nous considérerons tous les mots-clés, mais nous nous concentrerons davantage sur require_once et include.

Quand utiliser les mots clés include ou require en PHP

Les mots-clés include et require copient tout le contenu, texte ou code, ou balisage, du fichier PHP spécifié dans le fichier PHP cible de l’instruction include. Cependant, le mot-clé include se comporte différemment de require dans la gestion des échecs.

  • require produit une erreur fatale (E_COMPILE ERROR) et arrête le script.
  • include ne produit qu’un avertissement (E_WARNING), et le script continue même si la section suivante a besoin du code du fichier PHP que vous avez inclus.

Les deux mots clés sont identiques si aucune erreur ne se produit.

Essayons d’ajouter un simple fichier PHP (variables.php) contenant quelques variables à notre fichier PHP actuel.

Le fichier variables.php :

<?php

$team = 'Golden State Warriors';
$fav_player = 'Steph Curry';

?>

Maintenant, utilisons le mot-clé include pour ajouter le contenu des variables.php :

<?php

echo "My favourite player is $fav_player and he plays for $team";

include 'variables.php';

echo "My favourite player is $fav_player and he plays for $team";

?>

Le résultat de l’extrait de code ci-dessus :

My favourite player is and he plays for

My favourite player is Steph Curry and he plays for Golden State Warriors

Comme vous pouvez le voir, la première ligne n’affiche pas le contenu des variables car nous n’avons pas inclus le fichier variables.php, mais une fois que nous l’avons ajouté, il contient le contenu des variables.

Maintenant, utilisons le mot clé require :

<?php

echo "My favourite player is $fav_player and he plays for $team";

include 'variables.php';

echo "My favourite player is $fav_player and he plays for $team";

?>

Production:

My favourite player is and he plays for

My favourite player is Steph Curry and he plays for Golden State Warriors

La même sortie a été produite. Maintenant, orthographions mal le fichier variables.php dans notre code et voyons l’effet.

Pour le mot-clé include :

My favourite player is and he plays for

Warning: include(variable.php): failed to open stream: No such file or directory in /home/runner/Jinku/index.php on line 5

Warning: include(): Failed opening 'variable.php' for inclusion (include_path='.:/nix/store/bq7pj5lz7rq92p3d3qyy25lpzic9phy5-php-7.4.21/lib/php') in /home/runner/Jinku/index.php on line 5

My favourite player is and he plays for

Pour le mot clé require :

My favourite player is and he plays for

Warning: require(variable.php): failed to open stream: No such file or directory in /home/runner/Jinku/index.php on line 5

Fatal error: require(): Failed opening required 'variable.php' (include_path='.:/nix/store/bq7pj5lz7rq92p3d3qyy25lpzic9phy5-php-7.4.21/lib/php') in /home/runner/Jinku/index.php on line 5

Vous pouvez maintenant voir la différence entre les deux. Avec le mot-clé include, le code continuait à s’exécuter même si le fichier inclus n’était pas présent et ne donnait qu’un avertissement.

Cependant, avec le mot-clé require, le code produisait une erreur fatale et s’arrêtait complètement à ce stade.

Quand utiliser les mots clés require_once ou include en PHP

Il y a des zones appropriées pour utiliser include ou require. Il est plus conseillé d’utiliser require tout le temps ; cependant, si votre application peut se passer du contenu du fichier PHP que nous avons l’intention d’ajouter au fichier PHP actuel, il se peut qu’il n’y ait pas de problème.

Pour donner plus de contexte pour comprendre les mots clés include, require et require_once, essayons un exemple. Pour cet exemple, nous allons créer un fichier functions.php qui sera inclus et nécessaire pour mettre en valeur la différence.

Le fichier functions.php :

<?php

function add_sums($a, $b) {
  return $a + $b;
}

?>

Utilisons include :

<html>
  <head>
    <title>PHP Test</title>
  </head>
  <body>
    <?php
    include 'functions.php';

        echo "The program is starting\n";
    $sum = add_sums(2,3);

    echo "The program is done\n";
    echo $sum;
    ?>
  </body>
</html>

La sortie de l’extrait de code :

The program is done 5

Utilisons require:

<html>
  <head>
    <title>PHP Test</title>
  </head>
  <body>
    <?php
    require 'functions.php';

        echo "The program is starting\n";
    $sum = add_sums(2,3);

    echo "The program is done\n";
    echo $sum;
    ?>
  </body>
</html>

La sortie de l’extrait de code :

The program is done 5

Cependant, si le fichier functions.php n’est pas disponible et que nous utilisons include, le résultat sera le suivant :

Warning: include(functions.php): failed to open stream: No such file or directory in /home/runner/Jinku/index.php on line 7

Warning: include(): Failed opening 'functions.php' for inclusion (include_path='.:/nix/store/bq7pj5lz7rq92p3d3qyy25lpzic9phy5-php-7.4.21/lib/php') in /home/runner/Jinku/index.php on line 7

The program is starting

Fatal error: Uncaught Error: Call to undefined function add_sums() in /home/runner/Jinku/index.php:9 Stack trace: #0 {main} thrown in /home/runner/Jinku/index.php on line 9

Bien que le functions.php ne soit pas là, le code fonctionnait toujours jusqu’à ce qu’il rencontre une erreur fatale en raison d’un appel à une fonction non définie, ce qui n’est pas un moyen efficace de travailler dans les applications PHP.

Cependant, lorsque nous utilisons require, l’erreur ressemble à ceci :

Warning: require(functions.php): failed to open stream: No such file or directory in /home/runner/Jinku/index.php on line 7

Fatal error: require(): Failed opening required 'functions.php' (include_path='.:/nix/store/bq7pj5lz7rq92p3d3qyy25lpzic9phy5-php-7.4.21/lib/php') in /home/runner/Jinku/index.php on line 7

Parce que nous avons utilisé le mot-clé require, nous avons pu éviter l’erreur fatale due à un appel à une fonction indéfinie. Pour les applications PHP assez complexes, require sera plus approprié pour pouvoir attraper rapidement les erreurs et éviter les conséquences indésirables.

Maintenant, allons plus loin. Utilisons le mot clé require_once :

<html>
  <head>
    <title>PHP Test</title>
  </head>
  <body>
    <?php
        // Previous code START
    require_once 'functions.php';

        echo "The program is starting\n";
    $sum = add_sums(2,3);

    echo "The program is done\n";
    echo $sum;
        // Previous code ENDS

        // Additional code STARTS

    echo "Another program begins";
    require 'functions.php';
    $sum = add_sums(2,3);
    echo $sum;
    echo "Another program ends";
    ?>
  </body>
</html>

La sortie de l’extrait de code ci-dessus produirait une erreur fatale :

The program is starting
The program is done
5
Another program begins

Fatal error: Cannot redeclare add_sums() (previously declared in /home/runner/Jinku/functions.php:3) in /home/runner/Jinku/functions.php on line 3

Le mot clé require_once vérifiera si le fichier a été inclus, et si c’est le cas, ne l’inclura pas ou ne l’exigera pas à nouveau. Par conséquent, parce que nous avons utilisé le mot clé require_once plus tôt, il empêche d’exiger ou même d’inclure le code de functions.php.

Vous voudrez peut-être le faire pour empêcher la redéclaration des appels de fonction ou les affectations de valeur de variable, qui peuvent être coûteuses pour votre code.

Dans l’exemple, si nous avons utilisé require deux fois, cela appellera à nouveau la fonction et produira le même effet qu’avant, ce qui donne une valeur de 5.

Combinaisons pour comprendre :

  • require et require_once génèrent une erreur fatale.
  • include et include_once génèrent une erreur fatale.
  • require_once et require_once fonctionneront bien, mais tout le contenu sera rappelé et redéclaré.
  • include_once et include_once fonctionneront bien, mais tout le contenu sera rappelé et redéclaré.
Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn

Article connexe - PHP File