| 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: 15 let
|
|||
0