Kuo skiriasi funkcijos include() ir include_once()?

2014-10-22

Turbūt PHP kode jums teko sutikti abi šias funkcijas, lygiai taip pat yra require() ir require_once(). Bet ne visi žino, kuo jos skiriasi ir kada kokią naudoti.

Veikimo prasme šios funkcijos visiškai identiškos - ar su _once(), ar be jo, bus įkeltas failo kodas. Skirtumas pasirodo tada, kai įvyksta klaida.

Principas toks: jeigu naudojamas include() ir tas failas jau buvo "includintas" aukščiau kitame skripte, tada PHP išmes klaidą ir nustos vykdyti skriptą iškarto. Sakys, maždaug, pala, negalima dar kartą deklaruoti to paties kodo ar tų pačių funkcijų. O include_once() patikrins, ar tas failas jau buvo anksčiau įkeltas, ir jei taip - tada praleis tą vietą, neįkels kodo dar kartą, ir vykdys skriptą toliau.

Pažiūrėkime į pavyzdį. Sakykime, turime tris failus: functions.php, header.php ir index.php.

functions.php:

function pi() { return 3.14; }

header.php:

include('functions.php');
echo 'Number Pi is: ' . pi();

index.php:

include('functions.php');
include('header.php');
echo 'This is our main site';

Jei šiuo atveju paleisite index.php failą, pamatysite štai ką:

Jei pastebėjote, failas functions.php yra "includinamas" ir į index, ir į header. Kas reiškia, kad funkcija pi() yra apibrėžiama du kartus, kas ir sukelia klaidą. Jeigu vietoje include() naudotume include_once(), šios klaidos nebūtų.

BET. BET! Tai nereiškia, kad include_once() ar require_once() yra geriau ir patikimiau. Dvi priežastys, dėl kurių šių funkcijų naudoti nerekomenduoju:

  • Jos veikia lėčiau. Galbūt ne taip, kad pastebėtumėte, bet pagal bendrą teoriją - šios funkcijos turi "įsiminti", kokie failai buvo jau įkelti į atmintį, o tam vis tiek sugaištamos brangios sekundės dalys. Dideliame tūkstančius lankytojų turinčiame projekte tos sekundžių dalys gali pasirodyti gana svarbios.
  • Šios funkcijos yra labiau "gelbėjimosi šiaudas" tiems, kas netvarkingai rašo kodą. Normaliai susirašius failų, funkcijų ir klasių struktūrą, tokios problemos kilti išvis neturėtų. Sutinku, kad galima pamiršti ir nepastebėti, kad failas jau įkeltas kitur, bet tada jau geriau gauti klaidą ir ją ištaisyti.

Tradiciškai pateikiu nuorodą į oficialią dokumentaciją: kiek plačiau apie include_once() galite pasiskaityti čia.


(Mailchimp sistema jums atsiųs patvirtinimo laišką, nepamirškite patvirtinti)


Komentarų: 0




Naujausi PHPpamokos.lt online-kursai

23 EUR (79.41 Lt)
23 EUR (79.41 Lt)
23 EUR (79.41 Lt)
Nuo Laravel 4 prie Laravel 5
Povilas Korop

23 EUR (79.41 Lt)
MySQL: nuo pradmenų iki optimizavimo
Povilas Korop
23 EUR (79.41 Lt)
OOP: objektinis programavimas su PHP
Povilas Korop
23 EUR (79.41 Lt)
Kaip kurti Wordpress pluginus?
Arūnas Liuiza

23 EUR (79.41 Lt)
PHP online-kursas pradedantiesiems
Povilas Korop