En PHP:
require
vs. include
?require_once
vs. include_once
?Il existe également require
et include_once
.
Donc, votre question devrait être ...
require
vs. include
?require_once
vs. require
La réponse à 1 est décrite ici .
La fonction require () est identique à include (), sauf qu'elle traite les erreurs différemment. Si une erreur se produit, la fonction include () génère un avertissement, mais le script continue son exécution. Require () génère une erreur fatale et le script s'arrête.
La réponse à 2 peut être trouvée ici .
L'instruction require_once () est identique à require () sauf que PHP vérifiera si le fichier a déjà été inclus et, le cas échéant, ne l'inclut pas à nouveau.
Utilisation
nécessite
lorsque le fichier est requis par votre application, par ex. un modèle de message important ou un fichier contenant des variables de configuration sans lesquelles l'application serait cassée.
require_once
lorsque le fichier contient un contenu susceptible de générer une erreur lors de l’inclusion ultérieure, par ex. function important() { /* important code */}
est absolument nécessaire dans votre application, mais étant donné que les fonctions ne peuvent pas être redéclarées, vous ne devez plus les inclure.
include lorsque le fichier n'est pas requis et que le flux d'applications doit continuer lorsqu'il n'est pas trouvé, par exemple.
idéal pour les modèles référençant des variables de la portée actuelle ou de quelque chose
include_once
dépendances facultatives susceptibles de générer des erreurs lors du chargement ultérieur ou éventuellement l'inclusion de fichiers distants que vous ne souhaitez pas faire deux fois en raison de la surcharge HTTP
Mais au fond, c'est à vous de choisir quand.
Ma suggestion est simplement d'utiliser require_once
99,9% du temps.
Utiliser require
ou include
implique que votre code ne soit pas réutilisable ailleurs, c’est-à-dire que les scripts que vous extrayez réellement exécutent code au lieu de rendre disponible une classe ou des bibliothèques de fonctions.
Si vous avez besoin/y compris du code qui s'exécute sur-le-champ, c'est du code de procédure et vous devez connaître un nouveau paradigme . Comme la programmation orientée objet, la programmation fonctionnelle ou la programmation fonctionnelle.
Si vous faites déjà OO ou une programmation fonctionnelle, utiliser include_once
va généralement être différer où vous trouvez des bugs/erreurs . Voulez-vous savoir que la fonction do_cool_stuff()
n'est pas disponible lorsque vous souhaitez l'appeler ultérieurement, ou au moment où vous vous attendez à ce qu'elle soit disponible en exigeant la bibliothèque? En règle générale, il est préférable de savoir immédiatement si quelque chose dont vous avez besoin n'est pas disponible, utilisez donc simplement require_once
.
Alternativement, dans la POO moderne, il suffit de chargement automatique vos classes lors de leur utilisation.
Différence entre les fonctions _once et les fonctions sans _once: le code sans _once sera inclus à nouveau, tandis que avec les fonctions _once PHP conserve la trace des fichiers inclus et l'inclut une seule fois.
Différence entre require et include: Si un fichier requis n’est pas trouvé, PHP émettra une erreur fatale alors que pour include, seul un avertissement sera émis.
include()
émettra un avertissement s'il ne peut pas inclure le fichier, mais le reste du script sera exécuté.
require()
lance un E_COMPILE_ERROR
et arrête le script s'il ne peut pas inclure le fichier.
Les fonctions include_once()
et require_once()
n'incluent pas le fichier une fois s'il a déjà été inclus.
Voir les pages de documentation suivantes:
Chaque fois que vous utilisez require_once()
peut être utilisé dans un fichier pour inclure un autre fichier lorsque vous avez besoin du fichier appelé une seule fois dans le fichier actuel. Ici, dans l'exemple, j'ai un test1.php.
<?php
echo "today is:".date("Y-m-d");
?>
et dans un autre fichier que j'ai nommé test2.php
<?php
require_once('test1.php');
require_once('test1.php');
?>
pendant que vous regardez le m nécessitant le fichier test1 deux fois mais le fichier inclura le test1 une fois et pour appeler la deuxième fois, il sera ignoré. Et sans arrêter affichera la sortie une seule fois.
Chaque fois que vous utilisez 'include_once () `peut être utilisé dans un fichier pour inclure un autre fichier lorsque vous avez besoin du fichier appelé plusieurs fois dans le fichier actuel. Ici, dans l'exemple, j'ai un fichier nommé test3.php.
<?php
echo "today is:".date("Y-m-d");
?>
Et dans un autre fichier que j'ai nommé test4.php
<?php
include_once('test3.php');
include_once('test3.php');
?>
pendant que vous regardez, le m, y compris le fichier test3, inclura le fichier une seule fois mais interrompra la poursuite de l’exécution.
Utilisez "include" pour les modèles réutilisables PHP . Utilisez "require" pour les bibliothèques requises.
"* _once" est agréable, car il vérifie si le fichier est déjà chargé ou non, mais cela n'a de sens que pour moi dans "require_once".
La différence réside dans l'erreur générée par les commandes. Avec require
, le fichier que vous voulez utiliser est vraiment requis et génère donc un E_ERROR
s'il n'est pas trouvé.
require()
est identique àinclude()
sauf qu'en cas d'échec, une erreur fatale de niveauE_ERROR
est également générée.
include
ne génère une erreur E_WARNING
que si elle échoue et est plus ou moins silencieuse.
Utilisez-le donc si le fichier est requis pour que le code restant fonctionne et si vous voulez que le script échoue, le fichier n'est pas disponible.
Pour *_once()
:
include_once()
peut être utilisé dans les cas où le même fichier peut être inclus et évalué plusieurs fois au cours d'une exécution particulière d'un script. Dans ce cas, cela peut aider à éviter des problèmes tels que la redéfinition de fonctions, la réaffectation de valeurs de variables, etc.
Il en va de même pour require_once()
bien sûr.
Référence: require()
, include_once()
Cette question a été posée il y a sept ans et aucune des réponses n'apporte une aide pratique à la question. Dans la programmation moderne PHP, vous utilisez principalement required_once
une seule fois pour inclure votre classe d'autoloader (composeur automatique), et toutes vos classes et fonctions seront chargées (les fichiers de fonctions doivent être ajoutés explicitement fichier composer.json
disponible dans tous les autres fichiers). Si, pour une raison quelconque, votre classe ne peut pas être chargée à partir de l'autoloader, vous utilisez require_once
pour le charger.
Ces jours-ci, vous utilisez require
uniquement pour scinder un gros morceau d'un fichier PHP. C'est principalement une définition de grand tableau. Dans ce cas, vous n'utilisez que require
pas require_once
.
<?php
// arr.php
return ['x'=>'y'];
<?php
//main.php
$arr= require 'arry.php'
Si le fichier que vous souhaitez utiliser contient quelque chose d'exécutable ou déclare des variables, vous devez presque toujours utiliser require
, car si vous utilisez require_once
à un autre endroit, votre code ne sera pas exécuté et/ou votre les variables ne s'initieront pas en silence, ce qui provoquera des bugs absolument difficiles à identifier.
Il n'y a pas de cas d'utilisation pratique pour include
et include_once
vraiment.
Vous devez conserver les définitions de classe et de fonction organisées dans des fichiers.
Utilisez require_once()
pour charger dépendances (classes, fonctions, constantes).
Utilisez require()
pour charger () fichiers de type modèle .
Utilisez include_once()
pour charger dépendances optionnelles (classes, fonctions, constantes).
Utilisez include()
pour charger () fichiers facultatifs de type modèle .
Avec require, le fichier doit exister, sinon, une erreur s'affichera; alors que avec include - si le fichier n'existe pas, la page continuera à se charger.
Exiger des pièces critiques, comme une autorisation et inclure toutes les autres.
Les inclus multiples sont juste une très mauvaise conception et doivent absolument être évités. Donc, peu importe.
Include / Require vous pouvez inclure le même fichier plusieurs fois.
require () est identique à include () sauf qu'en cas d'échec, une erreur fatale de niveau E_COMPILE_ERROR sera également générée. En d'autres termes, cela arrêtera le script alors que include () n'émettra qu'un avertissement (E_WARNING) permettant au script de continuer.
est identique à include/require sauf que PHP vérifie si le fichier a déjà été inclus, et si c'est le cas, ne l'incluez pas à nouveau.
include()
générera un avertissement lorsqu'il ne trouvera pas de fichier, mais require_once()
générera une erreur fatale.
Une autre chose est si le fichier est inclus avant. Alors require_once()
ne l'inclura plus.
À l'âge de PSR-0 / PSR-4
chargeurs automatiques, il peut être totalement inutile d'utiliser l'une de ces instructions si vous avez simplement besoin de rendre certaines fonctions/classes disponibles pour votre code (bien sûr, vous devez toujours utiliser require_once
l'autochargeur lui-même dans vos fichiers bootstrap et include
si vous utilisez toujours PHP en tant que moteur de modèle).
J'utilisais la fonction ci-dessous:
function doSomething() {
require_once(xyz.php);
....
}
Il y avait des valeurs constantes déclarées dans xyz.php.
Je dois appeler cette fonction doSomething () depuis un autre fichier script PHP.
Mais j’ai observé un comportement en appelant cette fonction dans une boucle: pour la première itération, doSomething () obtenait des valeurs constantes dans xyz.php
, mais plus tard, chaque itération doSomething()
n’était pas en mesure d’obtenir les valeurs constantes déclarées dans xyz.php
.
J'ai résolu mon problème en passant de require_once()
à include()
, le code doSomething()
mis à jour est le suivant:
function doSomething() {
include(xyz.php);
....
}
Désormais, chaque appel d’itération à doSomething()
obtient les valeurs constantes définies dans xyz.php
.
Du manuel :
require()
est identique àinclude()
sauf en cas d'échec, une erreur fatale de niveauE_COMPILE_ERROR
est également générée. En d'autres termes, le script sera arrêté alors queinclude()
n'émet qu'un avertissement (E_WARNING
) qui permet au script de continuer.
Il en va de même pour les variantes _once()
.
Quand doit-on utiliser require
ou include
?
Les fonctions require
et include
effectuent la même tâche, c’est-à-dire inclut et évalue le fichier spécifié, mais la différence est require
provoquera une erreur fatale lorsque l’emplacement du fichier spécifié est invalide ou pour toute erreur alors que include
générera un avertissement et poursuivra l’exécution du code. .
Vous pouvez donc utiliser la fonction require
dans le cas où le fichier que vous essayez d'inclure est le cœur du système et peut avoir un impact considérable sur le reste du code et vous pouvez utiliser la fonction include
quand le fichier que vous essayez d'inclure est un simple fichier contenant du code moins important.
Et ma recommandation personnelle (pour le code le moins important) est d’utiliser la fonction require
partout dans votre code alors qu’elle est en phase de développement afin que vous puissiez déboguer le code et remplacer plus tard toutes les fonctions require
par include
avant de le produire. si vous ratez un bogue, cela n'affectera pas l'utilisateur final et le reste du code s'exécutera correctement ...
Quand doit-on utiliser require_once
ou require
?
La différence fondamentale entre require
et require_once
est require_once
vérifiera si le fichier est déjà inclus ou non s'il est déjà inclus, alors il n'inclura pas le fichier alors que la fonction require
l'inclura indépendamment du fichier. si le fichier est déjà inclus ou non.
Ainsi, dans les cas où vous souhaitez inclure un morceau de code à plusieurs reprises, utilisez la fonction require
alors que si vous souhaitez inclure du code une seule fois dans votre code, utilisez require_once
.
Utilisez require function lorsque vous devez charger une classe, une fonction ou une dépendance.
Utilisez la fonction include lorsque vous souhaitez charger un fichier de style modèle
Si vous êtes toujours confus, utilisez simplement require_once pour toujours.
une chose que j'ai remarquée, lors de l'utilisation de include, je ne peux accéder qu'aux fonctions des fichiers inclus à partir du fichier qui les inclut. Avec require_once, je peux exécuter cette fonction dans un deuxième fichier required_once.
aussi: je recommande d'ajouter
if(file_exists($RequiredFile)){
require_once($RequiredFile);
}else{
die('Error: File Does Not Exist');
}
Parce que quand require_once tue la page, il peut parfois faire écho au répertoire des fichiers de votre site Web
Voici une fonction personnalisée que j'ai créée pour exiger des fichiers:
function addFile($file, $type = 'php', $important=false){
//site-content is a directory where I store all the files that I plan to require_once
//the site-content directory has "deny from all" in its .htaccess file to block direct connections
if($type && file_exists('site-content/'.$file.'.'.$type) && !is_dir('site-content/'.$file.'.'.$type)){
//!is_dir checks that the file is not a folder
require_once('site-content/'.$file.'.'.$type);
return 'site-content/'.$file.'.'.$type;
}else if(!$type && file_exists('site-content/'.$file) && !is_dir('site-content/'.$file)){
//if you set "$type=false" you can add the file type (.php, .ect) to the end of the "$file" (useful for requiring files named after changing vars)
require_once('site-content/'.$file);
return 'site-content/'.$file;
}else if($important){
//if you set $important to true, the function will kill the page (which also prevents accidentally echoing the main directory path of the server)
die('Server Error: Files Missing');
return false;
}else{
//the function returns false if the file does not exist, so you can check if your functions were successfully added
return false;
}
}
exemple d'utilisation:
$success = addFile('functions/common');
if($success){
commonFunction();
}else{
fallbackFunction();
}
Ils sont tous des moyens d'inclure des fichiers.
Exiger signifie qu'il en a besoin. Require_once signifie qu'il en aura besoin, mais ne l'exige qu'une fois. Inclure signifie qu’il inclura un fichier mais qu’il n’a pas besoin de lui pour continuer.
Exemples:
Require 'filename'
Require_once 'filename'
Include 'filename'
Il existe également une fonction include_once qui inclut un fichier une fois.
Include_once 'filename'
N’utilisez pas de lettres majuscules lorsque j’ai tapé sur mon téléphone.
Fondamentalement, si vous avez besoin d’un mauvais chemin, PHP renvoie une erreur fatale et la fonction d’arrêt est appelée. Toutefois, lorsque vous incluez un mauvais chemin, PHP continue l’exécution, mais ne fait que afficher un avertissement que le fichier n'existe pas.
À partir du mot anglais requis, PHP indique que l'exécution de la page ou du fichier dépend du fichier requis.
D'après mon expérience, il est normal d'exiger des fichiers importants tels que des fichiers de configuration, des classes de base de données et d'autres utilitaires importants.