Manuel PHP
Précédent | Chapitre 11. Les structures de contrôle | Suivant

# 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`

Exemple 11-2. utils.inc
    <?php
    define(PHPVERSION, floor(phpversion()));
    echo "LES GLOBALES SONT SYMPAS\n";
    function goodTea() {
    	return "Le Earl Grey est délicieux!";
    }
    ?>

Exemple 11-3. foolib.inc
    <?php
    require ("utils.inc");
    function showVar($var) {
    	if (PHPVERSION == 4) {
    		print_r($var);
    	} else {
    		dump_var($var);
    	}
    }
    // Une série de fonctions
    ?>

Puis, vous écrivez un script `cause_error_require.php`

Exemple 11-4. cause_error_require.php
    <?php
    require("foolib.inc");
    /* Ceci génère une erreur*/
    require("utils.inc");
    $foo = array("1",array("complex","quaternion"));
    echo "Ce code requiert utils.inc une deuxième fois, car il est requis \n";
    echo "dans foolib.inc\n";
    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 :

Exemple 11-5. foolib.inc (corrigé)
    <?php
    require_once("utils.inc");
    function showVar($var) {
    ?>

Exemple 11-6. 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ème fois, car il est requis
    dans foolib.inc
    Utilisation de GoodTea: Le Earl Grey est délicieux!
    Affichage de foo:
    Array
    (
        [0] => 1
        [1] => Array
            (
                [0] => complexe
                [1] => 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().

Précédent | Sommaire | Suivant
include() | Niveau supérieur | include_once()