Autor Zpráva
WMPopi
Profil
Potřebuji ve funkci číst z vnějšího vícerozměrného pole, ale pokud ve funkci zavolám global $config[provize], pole se nenačte. Vyřešil jsem to převedením vícerozměrného pole na jednorozměrné před funkcí, ve funkcí zavolám global a převedu zpět na vícerozměrného (abych nemusel přepisovat kód ve funkci).

Zajímalo by mě, proč to nefunguje tak jak jsem si představoval? :-)

$config[provize] = array(1, 2, 3);

$provize = $config[provize];
function import() {
  global $provize;
  $config[provize] = $provize;
  echo $config[provize];
}
Michal Benda
Profil
Zkus tohle:

$config[provize] = array(1, 2, 3);

$provize = $config[provize];
function import() {
  global $provize;
  global $config;
  
  $config[provize] = $provize;
  echo $config[provize];
}
Tori
Profil
Tyhle dva způsoby by měly fungovat normálně:
$config['provize'] = "nějaký text";

function import() {
  global $config;
  echo $config['provize'];
}

function import2() {
  echo $GLOBALS['config']['provize'];
}
Slovem global si obstaráváte přístup k proměnné, nikoli jen k její části - proto se nedá použít global $pole['index']. Když potřebujete pracovat s malou částí velkého pole a nechcete xkrát psát dlouhý název, můžete si ji zkopírovat do lokální proměnné:
$krabice['s']['velmi']['dobre']['ukrytym']['obsahem'] = 'čokoláda';

function najdiCokoladu()  {
  $zkratka = $GLOBALS['krabice']['s']['velmi']['dobre']['ukrytym']['obsahem'];
  echo $zkratka;
}
PS: Pokud provize není definovaná konstanta, bude lépe ji uzavřít do uvozovek/apostrofů jako všechny řetězce.
Mastodont
Profil
WMPopi:
Global je zlo, zvykni si potřebné údaje předávat jako parametr.
$provize = $config[provize];
function import($provize) {
  $config[provize] = $provize;
  echo $config[provize];
}

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0