require_once()

A require_once() behelyettesítődik a megadott fájllal, pont úgy, mint a C preprocesszor #include-ja, és ebben az értelemben hasonló a require()-höz. A fő különbség az, hogy a require_once() gondoskodik arról, hogy a kód csak egyszer kerüljön beillesztésre, így megvéd a változók vagy függvények újradeklarásából eredő hibáktól.

Például elkészíted a következő két fájlt: ezskozok.inc és izelib.inc

Példa 11-3. eszkozok.inc


<?php
define("PHPVERSION", floor(phpversion()));
echo "A GLOBÁLIS VÁLTOZÓK JÓK\n";
function joTea()
{
    return "Az Oolong tea jó ízű!";
}
?>

   

Példa 11-4. izelib.inc


<?php
require ("eszkozok.inc");
function valtozoMegjelenites($valtozo)
{
    if (PHPVERSION == 4) {
        print_r($valtozo);
    } else {
        var_dump($valtozo);
    }
}

// más függvények ...
?>

   
Aztán írsz egy szkriptet require_hiba_bemutatasa.php névvel:

Példa 11-5. require_hiba_bemutatasa.php


<?php
require("izelib.inc");
/* A következő sor hibát generál */
require("eszkozok.inc");
$ize = array("1",array("komplex","tömb"));
echo "Ez betölti az eszkozok.inc fájlt, amit már\n";
echo "egyszer az izelib.inc is betöltött.\n";
echo "joTea futtatása: ".joTea()."\n";
echo "ize kiírása: \n";
valtozoMegjelenites($ize);
?>

   
Amikor megpróbálod lefuttatni ez utóbbi programot, az eredmény (PHP 4.01pl2-t használva):


A GLOBÁLIS VÁLTOZÓK JÓK
A GLOBÁLIS VÁLTOZÓK JÓK

Fatal error:  Cannot redeclare joTea() in eszkozok.inc on line 5
   

Az izelib.inc és require_hiba_bemutatasa fájlok módosításával, require_once() használatával a probléma megoldódik. Átnevezve require_hiba_elkerulese.php-re az előzőt:

Példa 11-6. iezlib.inc (javítás)


...
require_once("eszkozok.inc");
function valtozoMegjelenites($valtozo) {
...
   

Példa 11-7. require_hiba_elkerulese.php


...
require_once("izelib.inc");
require_once("eszkozok.inc");
$ize = array("1",array("komplex","tömb"));
...
   
Ez utóbbit futtatva a kimenet (PHP 4.0.1pl2-t használva):


A GLOBÁLIS VÁLTOZÓK JÓK
Ez betölti az eszkozok.inc fájlt, amit már
egyszer az izelib.inc is betöltött.
joTea futtatása: Az Oolong tea jó ízű!
ize kiírása:
Array
(
    [0] => 1
    [1] => Array
        (
            [0] => komplex
            [1] => tömb
        )

)
   

Vedd észre, hogy a C preprocesszor #include-jához hasonlóan ez is "fordítás időben" végzi a beillesztéseket, azaz akkor, amikor a szkriptet feldolgozza. Ezért nem használható a szript olyan részeire, amik futás közben dinamikusan kerülnek be. Erre a célra az include_once() vagy az include() használható.

További példákhoz az require_once() és include_once() használatához nézd meg a PEAR kódot, ami a legfrissebb PHP disztribúciókban megtalálható.

Lásd még: require(), include(), include_once(), get_required_files(), get_included_files(), readfile(), és virtual().