Require_once vs Include dans PHP
-
Quand utiliser les mots clés
include
ourequire
en PHP -
Quand utiliser les mots clés
require_once
ouinclude
en 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
etrequire_once
génèrent une erreur fatale.include
etinclude_once
génèrent une erreur fatale.require_once
etrequire_once
fonctionneront bien, mais tout le contenu sera rappelé et redéclaré.include_once
etinclude_once
fonctionneront bien, mais tout le contenu sera rappelé et redéclaré.
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