En PHP:
- Quand dois-je utiliser
require
vsinclude
? - Quand dois-je utiliser
require_once
vsinclude_once
?
php
include
require
require-once
Scott B
la source
la source
Réponses:
Il y en a
require
etinclude_once
aussi.Votre question devrait donc être ...
require
vsinclude
?require_once
vsrequire
La réponse à 1 est décrite ici .
La réponse à 2 peut être trouvée ici .
la source
require_once()
sera le plus rapide des deuxUtilisation
exiger
lorsque le fichier est requis par votre application, par exemple un modèle de message important ou un fichier contenant des variables de configuration sans lesquelles l'application se briserait.
require_once
lorsque le fichier contient du contenu qui produirait une erreur lors de l'inclusion ultérieure, par exemple
function important() { /* important code */}
est définitivement nécessaire dans votre application, mais comme les fonctions ne peuvent pas être redéclarées, elles ne devraient pas être incluses à nouveau.inclure lorsque le fichier n'est pas requis et le flux d'application 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 quelque chose
les dépendances optionnelles include_once qui produiraient des erreurs lors du chargement ultérieur ou peut-être l'inclusion de fichiers distants que vous ne voulez pas voir se produire deux fois en raison de la surcharge HTTP
Mais en gros, c'est à vous de décider quand l'utiliser.
la source
include
?include_once
?require
?require_once
?Ma suggestion est de n'utiliser que
require_once
99,9% du temps.Utiliser
require
ouinclude
implique à la place que votre code n'est pas réutilisable ailleurs, c'est-à-dire que les scripts que vous tirez exécutent réellement du code au lieu de rendre disponible une classe ou certaines bibliothèques de fonctions.Si vous avez besoin / y compris du code qui s'exécute sur place, c'est du code procédural, et vous devez apprendre à connaître un nouveau paradigme . Comme la programmation orientée objet, la programmation basée sur les fonctions ou la programmation fonctionnelle.
Si vous faites déjà de la programmation OO ou fonctionnelle, l'utilisation
include_once
va principalement retarder où dans la pile vous trouvez des bugs / erreurs. Voulez-vous savoir que la fonctiondo_cool_stuff()
n'est pas disponible lorsque vous allez l'appeler plus tard, ou au moment où vous vous attendez à ce qu'elle soit disponible en nécessitant 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 et auquel vous vous attendez n'est pas disponible, alors utilisez-lerequire_once
.Alternativement, dans la POO moderne, il suffit de charger automatiquement vos classes lors de leur utilisation.
la source
include
famille est généralement une mauvaise idée pure et simple (car il est assez rare d'inclure des fichiers qui ont la possibilité de ne pas exister), et que surrequire_once
etrequire
, vous devez utiliserrequire_once
lorsque vous incluez des fichiers qui définissent des fonctions ou des classes à utilisé ailleurs, ou instancier des singletons comme des objets de connexion à une base de données, et utiliserrequire
pour inclure des fichiers qui font immédiatement des choses lorsqu'ils sont inclus. Dans toute grande application Web, ce dernier type d'inclusion est inhabituel.require_once
candidat est le plus susceptible d'être utilisé presque tout le temps. Étant donné les minuscules différences de frais généraux entre les choix,require
assure l'arrêt du script, je ne peux pas penser à de nombreux scénarios où une application peut survivre sans qu'un fichier ne soit inclus. Et_once
protège des problèmes de dupe. Quiconque en désaccord sait probablement ce qu'il fait, peut donc choisir celui qui convient à l'application ou au scénario.Différence entre les fonctions _once et sans fonctions _once: sans le code _once sera à nouveau inclus alors qu'avec les fonctions _once, PHP garde une trace des fichiers inclus et ne l'inclura qu'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.
la source
include()
lancera un avertissement s'il ne peut pas inclure le fichier, mais le reste du script s'exécutera.require()
jettera unE_COMPILE_ERROR
et arrêter le script s'il ne peut pas inclure le fichier.Le
include_once()
etrequire_once()
fonctions n'incluront pas le fichier une deuxième fois s'il a déjà été inclus.Consultez les pages de documentation suivantes:
la source
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.et dans un autre fichier que j'ai nommé test2.php
car vous regardez le m nécessitant deux fois le fichier test1 mais le fichier inclura le test1 une fois et pour un deuxième appel, cela sera ignoré. Et sans s'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é plus d'une fois dans le fichier actuel. Ici, dans l'exemple, j'ai un fichier nommé test3.php.
Et dans un autre fichier que j'ai nommé test4.php
lorsque vous regardez le m, y compris le fichier test3, le fichier sera inclus une seule fois mais arrêtera l'exécution.
la source
Utilisez "include" pour les modèles PHP réutilisables . 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 source
Vous devez conserver les définitions de classe et de fonction organisées dans des fichiers.
Permet
require_once()
de charger des dépendances (classes, fonctions, constantes).Utilisez
require()
pour charger des fichiers de type modèle .Permet
include_once()
de charger des dépendances optionnelles (classes, fonctions, constantes).Utilisez
include()
pour charger des fichiers de type modèle en option .la source
Une réponse après 7 ans pour 2018
Cette question a été posée il y a sept ans, et aucune des réponses ne fournit d'aide pratique à la question. Dans la programmation PHP moderne, vous n'utilisez principalement
required_once
qu'une seule fois pour inclure votre classe d'autochargeur (autochargeur de compositeur souvent), et il chargera toutes vos classes et fonctions (les fichiers de fonctions doivent être explicitement ajoutés aucomposer.json
fichier pour être disponibles dans tous les autres fichiers). Si, pour une raison quelconque, votre classe ne peut pas êtrerequire_once
chargée à partir du chargeur automatique, vous l'utilisez pour la charger.Il y a des occasions que nous devons utiliser
require
. Par exemple, si vous avez une très grande définition de tableau et que vous ne voulez pas l'ajouter à votre code source de définition de classe, vous pouvez:Si le fichier que vous avez l'intention d'inclure contient quelque chose d'exécutable ou déclare certaines variables que vous devez presque toujours utiliser
require
, car si vous utilisez enrequire_once
dehors du premier endroit, votre code ne sera pas exécuté et / ou vos variables ne se lanceront pas silencieusement, provoquant des bogues qui sont absolument difficiles à cerner.Il n'y a pas de cas d'utilisation pratique pour
include
etinclude_once
vraiment.la source
include()
, enveloppé dans un tampon de sortie pour implémenter votre moteur de modèles.require()
pour diviser des fichiers volumineux.require_once
de PHPMailer dans une fonction, et mon chargeur automatique définit la$mail
variable nécessaire plus tard dans le code, donc la suivanterequire_once
est ignorée, ce qui$mail
n'est pas initialisé! la solution était de simplement utiliserrequire
après l'appel de fonction.require
dans ces cas?La différence réside dans l'erreur générée par les commandes. Avec
require
, le fichier que vous souhaitez utiliser est vraiment nécessaire et génère donc unE_ERROR
s'il n'est pas trouvé.include
ne génère uneE_WARNING
erreur qu'en cas d'échec plus ou moins silencieuse.Utilisez-le donc si le fichier est requis pour faire fonctionner le code restant et que vous souhaitez que le script échoue, le fichier n'est pas disponible.
Pour
*_once()
:Il en va
require_once()
de même bien sûr.Référence:
require()
,include_once()
la source
require
donne E_COMPILE_ERROR, pas E_ERROR.Avec require, le fichier doit exister, sinon, une erreur s'affichera; alors qu'avec include - si le fichier n'existe pas alors la page continuera son chargement.
la source
Exiger des pièces critiques, comme l'autorisation et inclure toutes les autres.
Les inclusions multiples sont simplement de très mauvaise conception et doivent être évitées du tout. Donc, * _once n'a pas vraiment d'importance.
la source
Inclure / exiger que vous puissiez également inclure plusieurs fois le même fichier:
require_once / include_once
la source
include()
générera un avertissement lorsqu'il ne trouvera pas de fichier, maisrequire_once()
générera une erreur fatale.Une autre chose est si le fichier est inclus avant. Ensuite ,
require_once()
ne comprendra pas encore.la source
J'utilisais la fonction comme ci-dessous:
Il y avait des valeurs constantes déclarées dans xyz.php.
Je dois appeler cette fonction doSomething () à partir d'un autre fichier de script PHP.
Mais j'ai observé un comportement lors de l'appel de cette fonction dans une boucle, pour la première itération, doSomething () obtenait des valeurs constantes à l'intérieur
xyz.php
, mais plus tard chaque itérationdoSomething()
n'a pas pu obtenir les valeurs constantes déclarées dansxyz.php
.J'ai résolu mon problème en passant de
require_once()
àinclude()
, ledoSomething()
code mis à jour est le suivant:Maintenant, chaque itération appelle
doSomething()
obtient les valeurs constantes définies dansxyz.php
.la source
Du manuel :
Il en va de même pour les
_once()
variantes.la source
À l'ère des
PSR-0 / PSR-4
chargeurs automatiques, il peut être complètement inutile d'utiliser l'une des instructions si tout ce dont vous avez besoin est de rendre certaines fonctions / classes disponibles pour votre code (bien sûr, vous devez toujours serequire_once
charger automatiquement dans votre fichier de démarrage et vosinclude
modèles si vous toujours utiliser PHP comme moteur de modèle).la source
Quand faut-il utiliser
require
ouinclude
?Les fonctions
require
etinclude
effectuent la même tâche, c'est-à-dire incluent et évaluent le fichier spécifié, mais la différence estrequire
provoquera une erreur fatale lorsque l'emplacement du fichier spécifié n'est pas valide ou pour toute erreur alors queinclude
générera un avertissement et continuera l'exécution du code.Vous pouvez donc utiliser la
require
fonction dans le cas où le fichier que vous essayez d'inclure est le cœur du système et peut avoir un impact énorme sur le reste du code et vous pouvez utiliser lainclude
fonction lorsque le fichier que vous essayez d'inclure est un fichier simple contenant du code moins important.Et ma recommandation personnelle (pour le code moins important) est d'aller chercher la
require
fonction partout dans votre code pendant qu'il est en phase de développement de sorte que vous puissiez déboguer le code et ensuite remplacer toutes lesrequire
fonctions parinclude
fonction avant de le déplacer en production de sorte que si vous manquez tout bogue n'affectera pas l'utilisateur final et le reste du code s'exécute correctement ...Quand faut-il utiliser
require_once
ourequire
?La différence de base entre
require
etrequire_once
est derequire_once
vérifier si le fichier est déjà inclus ou non s'il l'est déjà alors il n'inclura pas le fichier alors que lerequire
fonction inclura le fichier indépendamment du fait que le fichier soit déjà inclus ou non.Donc, dans les cas où vous souhaitez inclure encore et encore du code, utilisez la
require
fonction alors que si vous souhaitez inclure du code une seule fois dans votre code, utilisezrequire_once
.la source
Utilisez la fonction require lorsque vous devez charger une classe, une fonction ou une dépendance.
Utilisez la fonction d' inclusion lorsque vous souhaitez charger un fichier de style modèle
Si vous êtes toujours confus, utilisez simplement require_once pour toujours.
la source
Ce sont toutes des façons 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 seule fois. Inclure signifie qu'il inclura un fichier mais qu'il n'en a pas besoin pour continuer.
Exemples:
Il existe également une fonction include_once qui inclut une fois un fichier.
N'utilisez pas de majuscules là où je les ai car je tape à partir de mon téléphone.
la source
une chose que j'ai remarquée, lorsque j'utilise include, je ne peux accéder aux fonctions des fichiers inclus qu'à partir du fichier qui l'a inclus. Avec require_once, je peux exécuter cette fonction dans un deuxième fichier required_once.
aussi: je recommande d'ajouter
Parce que lorsque 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:
exemple d'utilisation:
la source
Fondamentalement, si vous avez besoin d'un mauvais chemin, PHP génère une erreur fatale et la fonction d'arrêt est appelée, mais lorsque vous incluez un mauvais chemin, PHP continuera l'exécution, mais il affichera simplement un avertissement indiquant que le fichier n'existe pas.
Du mot anglais require , PHP est informé 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.
la source
Il s'agit souvent de savoir si vous souhaitez charger une bibliothèque cliente de manière conditionnelle, ou continuer et la charger, que vous l'utilisiez ou non.
Voici un exemple concret; élaborer sur ce que PCJ a dit.
Supposons que vous ayez un fichier de configuration stockant votre nom d'utilisateur et votre mot de passe de base de données (conf.php):
Et une classe avec une fonction statique qui utilise la base de données:
Et cette fonction statique est utilisée à l'intérieur d'une autre fonction qui est appelée itérativement à l'intérieur d'une boucle:
Vous ne pouvez exiger / inclure la classe qu'une seule fois. Si vous l'exigez / l'incluez à chaque itération de votre boucle, vous obtiendrez une erreur. Cependant, vous devez inclure votre fichier conf à chaque appel de la fonction statique.
Bien sûr, le déplacer en dehors de la fonction pourrait être une solution à ce problème:
À moins que vous ne soyez préoccupé par la surcharge de chargement d'une classe qui ne peut être utilisée que dans certaines conditions et que vous ne souhaitez pas la charger lorsqu'elle ne l'est pas.
la source
require
a un temps système supérieur àinclude
, car il doit d'abord analyser le fichier. Le remplacementrequires
parincludes
est souvent une bonne technique d'optimisation.la source
require
n'analyse pas le fichier plus queinclude
ne le fait. Les_once
versions de ces fonctions ont chacune un peu de surcharge, mais comme d'autres l'ont dit, elles sont presque négligeables dans la plupart des applications.Utilisez simplement require et include.
Parce que pensez à travailler avec include_once ou require_once. Cela recherche des données de journal qui enregistrent les fichiers PHP inclus ou requis. C'est donc plus lent que d'inclure et d'exiger.
J'utilise juste comme ça ...
la source