REQUIRE vs INCLUDE

Co pouzivate , co je lepsi?

Ja vim, ze iclude je pry rychlejsi (dle knih), zaroven umoznuje
informovat o stavu, tj. pokud neni co vkladat vyhodi to chybu.


Dale, na co je dobre pouzivat include_once ... nepouzivam to a
nechybi mi to ...

(vim ze to zabranuje opakovanemu vlozeni kodu ...)
require se ma pouzivat tam, kde je naprosto nezbytne nutne. Neuspesne require hodi fatal error a zastavi skript, kdezto include jen warning a skript bezi dal...

<quote php manual>
The include_once() statement includes and evaluates the specified file during the execution of the script. This is a behavior similar to the include() statement, with the only difference being that if the code from a file has already been included, it will not be included again. As the name suggests, it will be included just once.
</quote php manual>
<HTML>require() and include() are identical in every way except how they handle failure. include() produces a Warning while require() results in a Fatal Error. In other words, don't hesitate to use require() if you want a missing file to halt processing of the page. include() does not behave this way, the script will continue regardless.

To myslim rika vse, proto otazka "co je lepsi" je vcelku nesmyslna...
ja vse co includuji povazuji za required ;)</HTML>
<HTML>tak jsme se tak nejak potkali ve stejnem case jak sleduji, ale kazdy citoval neco jineho :)</HTML>
Tim lip :-)
Nekkde jsem cet, ze require se nada pouzit v cyklech...
Sojkovec > já jsem někde četl, že toto chování (jedna funkce se vykoná pouze jednou zatímco druhá libovolněkrát) už od nějaké verze PHP neplatí, že se chovají v tomhle ohledu stejně. Takže buď jsi citoval starý manuál, nebo v knize ve které jsem to četl měli nepřesnost, nebo jsem jen tu tvou anglickou citaci špatně pochopil protože nemám klid na soustředění ;-)

Jinak já používám všude require, ani nevím proč :-)
Tom: Je to citace z manualu tak, ja je na www.php.net, takze starej bude tezko. A co se literatury tyce, je-li nekde rozpor, pak verim spise manualu.
<HTML>Tom: ja jsem nic o tomhle v manualu nenasel, takze mas zrejme spatnou liteaturu...
I kdyz na disku mam jen php zdroj verze 4.3.3, je tam jasne videt odlisna exekuce require a include od require_once a include_once</HTML>
cituji z L. Welling, L. Thompon: PHP a MySQL rozvoj webových aplikací 2. vydání, SoftPress:

Příkazy require a include jsou téměř identické. Jediný rozdíl mezi nimi spočívá v tom, že když selžou, vede require na fatální chybu, kdežto include jen na upozornění.
Je to změna ve způsobu práce obou kontrukcí. Před verzí PHP 4.0.2 byly v jejich chování značné rozdíly. Jestliže stále ještě pracujete se starší verzí PHP, přečtěte si následující poznámky:
Příkaz include se vyhodnocoval pokaždé, když se spustil. Když se ale nespustil, nevyhodnotil se vůbec. Příkaz require se vykonal tehdy, když na něj poprvé narazil parser, bez ohledu na to, zda se vykoná blok, který require obsahuje.
atd.....

Tak a teď se dívám znovu na Sokovcům příspěvek a vidím že jsem se přehlídl. On porovnával include_once a include, nikoliv require a include. Což mě nenapadlo, protože se mluvilo o require vs include. Takže jsem to asi citoval zbytečně.
include_once se moc často nepoužívá, někdy ale nastane situace, kdy sice můžeš použít šílená větvení běhu skriptu, která by však znemožnila přehlednost, jenom aby ses při inkludování některých skriptů vyhnul chybovým hláškám typu "funkce je již definována" apod. Od toho je právě include_once - php před vložením takového souboru zkontroluje, zda jej už nevložil.

Lze to přirovnat k normálnímu include takovéhoto skriptu:
if(KONSTANTA != 1) {
define('KONSTANTA', 1);
... příkazy, funkce a další věci, které mají být vloženy pouze jednou
}
pokud tento skript includujete ještě někde podruhé (potřetí atd.), je KONSTANTA již rovna 1 a tudíž se skript neprovede.

v céčku to třeba vypadá (a často se to tak dělá) takto:
#ifndef _HLAVICKAC_H
#define _HLAVICKAC_H
...
#endif

Je to věc názoru. Někdy ale může složitá síť podmínek, cyklů apod. v inkludujícím skriptu být složitá tak, že bez použití include_once by se v tom nevyznalo ani prase.