Az include() beilleszti és feldolgozza a megadott file-t.
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.
Ez történik valahányszor az include()-hoz ér a program, tehát használhatod az include()-ot egy ciklus belsejében, hogy különböző file-okat behúzzál.
1 2 3 $fileok = array ('elso.inc', 'masodik.inc', 'harmadik.inc'); 4 for ($i = 0; $i < count($fileok); $i++) { 5 include $files[$i]; 6 } 7 8 |
Az include() abban különbözik a require()-től, hogy míg az include() minden alkalommal kiértékelődik, ahányszor előfordul (és csak akkor, ha éppen oda kerül a vezérlés), addig a require() az első alkalommal helyettesíti a file-t, akár kiértékelődik a tartalma, akár nem (például egy olyan if kifejezésben, amely mindig hamis).
Mivel az include() egy különleges nyelvi elem, védened kell kapcsos zárójelekkel, ha egy feltételes utasításon belül szerepel.
1 2 3 /*Ez NEM JÓ, és nem a várt eredményt adja */ 4 5 if ($feltetel) 6 include($file); 7 else 8 include($other); 9 10 /* Ez HELYES */ 11 12 if ($feltetel) { 13 include($file); 14 } else { 15 include($other); 16 } 17 18 |
A PHP3-ban, és a PHP4-ben is lehetőség van arra, hogy return utasítást helyezz el egy include()-olt file-ban annak érdekében, hogy a kiértékelés befejeződjön, és visszaadjon egy értéket a hívó script-nek. Bár vannak apróbb különbségek. Először is a PHP3 nem engedi meg, hogy a return egy blokkban legyen, kivéve ha az egy függvényblokk, ami ugye csak abból a függvényből fog visszatérni, és nem az egész file-ból. A PHP4-ben ez a megszorítás nincs. Vagyis a PHP4 megenged visszatérési értékeket include()-olt file-okból. A visszatérési értéket ugyanúgy használhatod, mint egy közönséges függvénynél. Ez a PHP3-ban értelmezési hibát (parse error) okoz.
Példa 11-1. Az include() PHP3-ban és PHP4-ben Tegyük fel, hogy a következő file (melynek neve: test.inc) abban a könyvtárban van, mint a főfile:
És legyen a főfile (main.php) tartalma az alábbi:
Ha a main.php file-t PHP3-ból hívjuk meg, értelmezési hibát (parse error) kapunk a 2. sorban; nem lehet egy include()-nak az értékét venni. PHP4-ben az eredmény pedig:
Most pedig változtassuk meg a main.php file-t az alábbira:
PHP4-ben a kimenet:
A fenti hiba annak a következménye, hogy a return egy kapcsos zárójelezett részben van, amely nem függvényen belül található a test.inc file-ban. Ha a return-t kivesszük a blokkból, a kimenet ilyen lesz:
A nemkívánatos '27' azért van ott, mert a PHP3 nem támogatja az ilyen file-okból való visszatérési értékeket. |
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 include ("file.inc?elsovaltozo=1&masodikvaltozo=2"); /* Ez nem fog működni. */ 4 5 $elsovaltozo = 1; 6 $masodikvaltozo = 2; 7 include ("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!
Lásd még: readfile(), require(), és virtual().