Sommaire

Les structures de contrôle

if
else
elseif
Syntaxe alternative
while
do..while
for
foreach
break
continue
switch
declare
require
include
require_once
include_once

4.7.15 require_once

La commande require_once se remplace elle-même par le fichier spécifié, un peu comme les commandes de préprocesseur C #include, et ressemble sur ce point à require. La principale différence est qu'avec require_once, vous êtes assurés que ce code ne sera ajouté qu'une seule fois, évitant de ce fait les redéfinitions de variables ou de fonctions, génératrices d'alertes.

Par exemple, si vous créez les deux fichiers d'inclusion utils.inc et foolib.inc
utils.inc

<?php
define
(PHPVERSIONfloor(phpversion()));
echo 
"LES GLOBALES SONT SYMPASn";
function 
goodTea() {
    return 
"Le Earl Grey est d&eacute;licieux!";
}
?>
foolib.inc

<?php
require ("utils.inc");
function 
showVar($var) {
    if (
PHPVERSION == 4) {
        
print_r($var);
    } else {
        
dump_var($var);
    }
}
// Une s&eacute;rie de fonctions
?>
Puis, vous écrivez un script cause_error_require.php
cause_error_require.php

<?php
require("foolib.inc");
/* Ceci g&eacute;n&egrave;re une erreur*/
require("utils.inc");
$foo = array("1",array("complex","quaternion"));
echo 
"Ce code requiert utils.inc une deuxi&egrave;me fois, car il est requis n";
echo 
"dans foolib.incn";
echo 
"Utilisation de GoodTea:@: ".goodTea()."n";
echo 
"Affichage de foo: n";
showVar($foo);
?>
Lorsque vous exécutez le script ci-dessus, le résultat sera (sous PHP 4.01pl2):@:

GLOBALS ARE NICE
GLOBALS ARE NICE
Fatal error:@:  Cannot redeclare causeerror() in utils.inc on line 5
En modifiant foolib.inc et cause_errror_require.php pour qu'elles utilisent require_once au lieu de require et ne renommant pas le fichier en avoid_error_require_once.php, on obtient :@:
foolib.inc (corrigé)

<?php
require_once("utils.inc");
function 
showVar($var) {
?>
avoid_error_require_once.php

<?php
require_once("foolib.inc");
require_once(
"utils.inc");
$foo = array("1",array("complexe","quaternion"));
?>
L'exécution de ce script, sous PHP 4.0.1pl2, donne :@:

LES GLOBALES SONT SYMPA
Ce code requiert utils.inc une deuxi&egrave;me fois, car il est requis
dans foolib.inc
Utilisation de GoodTea:@: Le Earl Grey est d&eacute;licieux!
Affichage de foo:
Array
(
    [0] =&gt; 1
    [1] =&gt; Array
        (
            [0] =&gt; complexe
            [1] =&gt; quaternion
        )
)

Notez aussi que, de la même manière que les préprocesseurs traitent les #include, cette commande est exécutée au moment de la compilation, c'est-à-dire lorsque le script est analysée, et avant qu'il soit exécuté, et ne doit pas être utilisée pour insérer des données dynamiques liées à l'éxécution. Il vaut alors mieux utiliser include_once ou include.

Pour plus d'exemples avec require_once et include_once, jetez un oeil dans le code de PEAR inclus dans la dernière distribution de PHP.

Voir aussi :@: require, include, include_once, get_required_files, get_included_files, readfile, et virtual.