La commande require() se remplace elle-même
par le contenu du fichier spécifié, comme les
préprocesseurs C le font avec la commande #include.
Il est important de noter que lorsqu'un fichier est
include() ou require(),
les erreurs d'analyse apparaîtront en HTML tout au début
du fichier, et l'analyse du fichier parent ne sera pas interrompue. Pour
cette raison, le code qui est dans le fichier doit être placé
entre les balises habituelles de PHP.
require() n'est pas vraiment une fonction PHP :
c'est plus une instruction du langage. Elle ne fonctionne pas comme
les fonctions standards. Par exemple, require()
est indépendante des structures de contrôle (cela ne sert à rien
de la placer dans une condition, elle sera toujours exécutée). De plus,
elle ne retourne aucune valeur. Lire une valeur retournée par un
require() retourne une erreur d'analyse.
Contrairement à include(),
require() va toujours lire dans
le fichier cible, même si la ligne n'est jamais
exécutée. Si vous souhaitez une inclusion
conditionnelle, utilisez include(). La
condition ne va jamais affecter require().
Cependant, si la ligne de require()
n'est jamais exécutée, le code du fichier ne
le sera jamais non plus.
Les boucles n'affectent pas le comportement de
require(). Même si le code
contenu dans le fichier source est appelé dans la boucle,
require() n'est exécuté qu'une
fois.
Cela signifie qu'on ne peut pas mettre un
require() dans une boucle, et s'attendre
à ce qu'il inclue du code à chaque itération.
Pour cela, il faut utiliser include().
<?php
require('header.inc');
?>
Attention : include() et
require() ajoutent le contenu du fichier cible
dans le script lui-même. Elles n'utilisent pas le protocole
HTTP ou tout autre protocole. Toute variable qui est dans le
champs du script sera accessible dans le fichier d'inclusion,
et vice-versa.
<?php
require ("file.inc?varone=1&vartwo=2");
/* Ne fonctionne pas. */
$varone = 1;
$vartwo = 2;
require ("file.inc");
/* $varone et $vartwo seront accessibles à file.inc */
?>
Ne vous laissez pas abuser par le fait que vous pouvez
requérir ou inclure des fichiers via HTTP en
utilisant la fonctionnalité de
gestion des fichiers distants
ce qui est au dessus reste vrai.
En PHP 3, il est possible d'exécuter une commande
return depuis un fichier inclut, tant
que cette commande intervient au niveau global du fichier
inclus. Elle ne doit intervenir dans aucun bloc (entre accolade {}).
En PHP 4, cette possibilité a été
supprimée. Si vous en avez besoin, utilisez plutôt
include().