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 12-2 . utils.inc

 
?php

 
define(

 
PHPVERSION

 
,

 
floor(phpversion()))

 
;

 
echo

 
"LES

 
GLOBALES

 
SONT

 
SYMPAS\n"

 
;

 
function

 
goodTea(

 
)

 
{

 
return

 
"Le

 
Earl

 
Grey

 
est

 
d

 
eacute;licieux

 
!"

 
;

 
}

 
?



Exemple 12-3 . 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

Exemple 12-4 . 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.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 12-5 . foolib.inc ( corrigé )

 
?php

 
require_once(

 
"utils.inc")

 
;

 
function

 
showVar($var

 
)

 
{

 
?



Exemple 12-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( ) .