require()

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.