A require() függvény behelyettesítődik a megadott file-lal, pont úgy, mint a C preprocesszor #include-ja.
Egy fontos megjegyzés a működésre vonatkozólag, hogy ha egy file-t berántunk include()-al vagy require()-el, akkor kikerülünk a PHP módból HTML módba a célfile elején, és visszaáll PHP módba a file végén. Ezért, bármely célfileban levő PHP kódot közre kell fogni egy érvényes PHP kezdő- és zárótag-gel.
A require() valójában nem is egy függvény a PHP-ben, hanem egy nyelvi konstrukció. Ez azt jelenti, hogy más szabályok vonatkoznak rá, mint a függvényekre. Például a require()-re nem vonatkoznak a körbezáró struktúrák korlátozásai. Másfelől, nincs visszatérési értéke; ha megpróbálod kiolvasni a require() hívás visszatérési értékét, a hívás értelmezési hibát (parse error) eredményez.
Az include()-tól eltérőn a require() mindig beolvassa a célfilet, még akkor is, ha a sor, ahol áll soha nem hajtódik végre. Ha feltételesen szeretnél beemelni egy file-t, használd az include()-ot. A feltételes kifejezés nincs hatással a require()-ra. Ennek ellenére, ha a sor, amelyen a require() áll nem hajtódik végre, a célfile-ban lévő kód nem is fog lefutni.
Hasonlóan, a ciklusok sem változtatják meg a require() viselkedését. Bár a célfile kódja a ciklusmagban van, a require() végrehajtása csak egyszer történik meg.
Ez azt jelenti, hogy hiába teszed a require()-t egy ciklus belsejébe azt várva, hogy különböző fileokat hozzon be minden iterációra. Ha ezt szeretnéd használd az include()-ot. A require-t konstans file-nevekkel használd:
1 2 require ('header.inc'); 3 |
Figyelj rá, hogy mind az include(), mind a require() betölti az egész file-t a hívó scriptfile-ba, nem meghívja HTTP protokollal, vagy valami mással. Tehát bármely változó, ami a betöltés környezetében látható, automatikusan elérhető lesz a betöltött file-ban is, mivel gyakorlatilag a hívó file része lesz.
1 2 3 require ("file.inc?elsovaltozo=1&masodikvaltozo=2"); /* Ez nem fog működni. */ 4 5 $elsovaltozo = 1; 6 $masodikvaltozo = 2; 7 require ("file.inc"); /* a két változó elérhető lesz a file.inc-en belül */ 8 9 |
Ne vezessen félre az a tény, hogy a require() és az include() használható HTTP-n keresztül is file-ok betöltésére a Távoli file-ok kezelése szolgáltatásnak köszönhetően. A fent említett korlátozás mindig igaz!
A PHP3-ban van rá lehetőség, hogy egy return-t helyezzünk el a require()-rel behívott file-ba, ha a return a behívott file globális részében van. Nem szerepelhet blokkban sem, tehát nem lehet kapcsos zárójelen belül ({}). A PHP4-ben ezt a lehetőséget megszüntették. Ha szeretnél valami ilyesfélét, akkor nézd meg az include()-ot.