Autor | Zpráva | ||
---|---|---|---|
euzen Profil |
#1 · Zasláno: 3. 9. 2011, 15:15:22
Zdravim,
mám menší problém s předáním dat. Situace je následující: hlavní soubor index.php, který postupně includuje několik souborů. V prvním includovaném souboru je funkce, která mi vygeneruje data a ta si uložím do proměnné (pole). V dalším includovaném souboru potřebuji tato data využít, ale proměnná se tváří, že je prázdná. v souboru index.php, jsem si vytvořil onu proměnnou, do které pak přes následující kód ukládám informace v prvním includovaném souboru global $seznam; $seznam[$idKategorie] = $ibg; v druhém includovaném souboru pak následujícím způsobem potřebuji vypsat data, ale nefunguje to global $seznam; echo $seznam[$idKategorie]; Nevíte prosím někdo co s tím? Jak spolehlivě předat data? |
||
Alphard Profil |
#2 · Zasláno: 3. 9. 2011, 15:52:59
Include neovlivňuje viditelnost proměnných. Problém bude zřejmě v té funkci, kterou jste zmínil. Předejte data do global scope a pak je do další funkce vkládejte jako parametr. Nebo můžete použít global případně reference, ale není to hezké.
|
||
sysel Profil |
#3 · Zasláno: 4. 9. 2011, 00:52:03
Opravte mne, jestli se mýlím, ale části kódu připojené direktivou include() jsou prostě jen jakoby dopsané*. Tedy by neměly obsahovat znovu pokyn
global $seznam global bych přestěhoval do hlavního souboru a v includovaných už jen počítal s globální proměnnou. Ostatně globální/lokální se vztahuje na platnost proměnných vně a uvnitř funkcí bez ohledu na to, zda je funkce definována v hlavním souboru či v includovaném. *) pokud obsahují nějaké definice funkcí, je rozumnější použít include_once() |
||
euzen Profil |
#4 · Zasláno: 5. 9. 2011, 11:35:52
Asi jsem příliš nepochopil, jak bych to měl řešit.
V hlavní souboru mám: global $seznam; V souboru (includovaném), kde se ve funkci plní ona proměnná, mám uvnitř těla funkce: $seznam[$idKategorie] = $ibg; A v dalším includovaném souboru, kde data vypisuji mám: echo $seznam[$tempo] Mělo by to fungovat správně? |
||
Tori Profil |
#5 · Zasláno: 5. 9. 2011, 11:41:52
euzen
global se používá uvnitř funkcí. Ale pokud to není nezbytně nutné, tak bych spíš použiila návratovou hodnotu. // include.php function xyz() { // ... $out[$idKategorie] = $ibg; return $out; } $seznam = xyz(); |
||
euzen Profil |
#6 · Zasláno: 5. 9. 2011, 11:48:22
Tori:
jde právě o to, že mi ta funkce generuje komplet kód celého menu, které se pak pomocí javascriptu "sestaví" a pokud bych tu funkci volal znovu, tak se mi to znovu vygeneruje, což nepotřebuji :/ |
||
Tori Profil |
#7 · Zasláno: 5. 9. 2011, 12:05:30 · Upravil/a: Tori
euzen:
Tak asi nechápu, jak to myslíte. // index.php include_once('funkce.php'); // funkce.php // - tady bude jen definice funkce vyrobMenu() ... include('hlavicka.php'); // hlavicka.php // tady si načtete data pro menu $menu = vyrobMenu(); // a zobrazíte ho. // pokračuje hlavní skript, includes pro obsah stránky, patičku |
||
Časová prodleva: 3 dny
|
|||
CZechBoY Profil |
#8 · Zasláno: 8. 9. 2011, 23:59:07
//index.php $lng=Array('pozdrav'=>'ahoj', 'odhlasit'=>'Brzy nashle'); //xyz.php function preklad($text) { global $lng; echo $lng[$text]; //případně return $lng[$text]; } |
||
Majkl578 Profil |
#9 · Zasláno: 9. 9. 2011, 00:03:56
euzen:
„a pokud bych tu funkci volal znovu, tak se mi to znovu vygeneruje, což nepotřebuji :/“ To už raději použij static jako interní cache. Ale ani jedno řešení se nejeví jako dobré/správné. function test() { static $data; if ($data === NULL) { $data = 'foo'; // u tebe ta náročná operace echo 'called'; } return $data; } test(); // called test(); // nic |
||
Slash24 Profil * |
#10 · Zasláno: 9. 9. 2011, 10:45:25
euzen:
jde právě o to, že mi ta funkce generuje komplet kód celého menu, které se pak pomocí javascriptu "sestaví" a pokud bych tu funkci volal znovu, tak se mi to znovu vygeneruje, což nepotřebuji :/ Načo by ste volal opatovne funkciu na vytvorenie menu ? Tori napísal dobré riešenie. Jednoducho <?php include('funkcie.php'); //subor funkcie.php bude obsahovat nasledovnu funkciu function createMenu () { //... //foreach ... $seznam[$idKategorie] = $ibg; return $seznam; } include('header.php'); //subor header.php bude obsahovat $seznam = createMenu(); //do premennej seznam sa nam ulozi pole s hodnotami menu poloziek, takze na výpis stací iterovať pole pomocou cyklu (najlepsie foreach) //nejako nasledovne foreach ($seznam as $menu_item) { echo $menu_item; } ?> |
||
Časová prodleva: 14 let
|
0