Autor | Zpráva | ||
---|---|---|---|
Hologos Profil |
Zdravím,
mám třídu, která mi zajišťuje načítání souborů, a pokud je nenajde, vyhodí mi vyjímku atd. Mám teďka problém s kontextem. page.php <?php var_dump(isset($a)); ?> index.php <?php ..... $a = TRUE; include './page.php'; // var_dump -> TRUE Loader::loadFile('./page.php'); // var_dump -> FALSE ..... ?> Dá se to nějak obejít, nebo si budu muset kontext předávat jako 2. parametr? Byl jsem zvyklí, že kontext vidím, teďka musím přepisovat hromadu kódu. Jak se tohle řeší ve frameworcích (existuje nějaké elegantní řešení)? |
||
Joker Profil |
#2 · Zasláno: 20. 4. 2012, 11:12:55
Hologos:
Nestačila by na tohle autoload funkčnost, která už je součástí PHP? Jinak to popsané chování (že prostě include se provede v kontextu ve kterém je ten příkaz) je celkem logické a obejít ho půjde těžko. |
||
Hologos Profil |
#3 · Zasláno: 20. 4. 2012, 11:21:41
Pokud se nemýlím, tak autoload zajišťuje načítání tříd, ale to já nepotřebuju. Já potřebuji, ab v souboru page.php byla vidět proměnná $a jako kdybych použil normální include.
|
||
Joker Profil |
#4 · Zasláno: 20. 4. 2012, 11:40:59
Hologos:
Nejen to, stejný problém bude i v opačném směru: Činnost toho vloženého kódu se taky projeví na kontextu metody loadFile, takže pokud třeba definuje funkci, bude tato dostupná jen uvnitř metody loadFile. |
||
Hologos Profil |
#5 · Zasláno: 20. 4. 2012, 12:09:27
Joker:
To už mi nevadí. Potřebuji jen proměnné, které budou v šabloně. Nechce se mi kvůli tomu dělat statická třída a přes tu se dotazovat. |
||
Časová prodleva: 10 dní
|
|||
Tori Profil |
Čistě ze zvědavosti: pokud bych měla neobjektovou aplikaci, skládanou ze souborů, které chci nějakým automatizovaným způsobem volat (třeba z routeru), byla by velká prasárna použít tohle?
function loadFile($name) { if (!is_file($name) && !is_readable($name)) { throw new InvalidArgumentException("Soubor $name neexistuje nebo je necitelny."); } extract($GLOBALS); include $name; return (!isset($return) ? $return : null); } |
||
Majkl578 Profil |
#7 · Zasláno: 30. 4. 2012, 17:24:53
[#6] Tori:
Podmínka na 2. řádku je špatně, mělo by tam být OR místo AND. Nechat funkci tahat věci z globálního prostoru je špatně, mnohem akceptovatelnější by bylo data regulérně předat parametrem. Funkce pak nic magicky nehledá. Ostatně obdobně funguje LimitedScope v Nette. |
||
Časová prodleva: 12 let
|
0