Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno PHP - Globálna premenná po unset() získa hodnotu

Mám v skratke takýto kód:

function asd()
{
  global $a;
  $a = 1;
  echo $a;
  funkcia spracuvajuca $a;
  unset($a);
  echo $a; //nehlasi mi to nic a isset($a) hlasi, ze neexistuje
  return;
}

{
  asd();
  echo $a; //hlasi mi to 1 a isset($a) hlasi, ze existuje
  $a[1] = 1;
}

Posledný riadok mi hádže hlášku:
Warning: Cannot use a scalar value as an array in D:\xampp\htdocs\...

Verzia PHP 5.2.8

Viete mi to vysvetliť? Zabil som hľadaním chyby 2 hodiny. Podľa mňa to nie je štandardné správanie.

Předmět Autor Datum
Snaz sa nepouzivat globalne premenne. Je to zly zvyk je z toho len chaos a bezpecnostne rizika. Da s…
MM.. 14.01.2009 19:54
MM..
Išiel som po riadkoch. Pred return vo funkcii si to hodnotu nepamätalo a po return v hlavnom kóde za…
msx. 14.01.2009 20:00
msx.
Precitaj si toto unset tam to mas presne popisane ze v com je problem v tvojom priklade. P.S. stale…
MM.. 14.01.2009 20:00
MM..
Už rozumiem, ďakujem. Myslel som, že je to chyba v PHP, lebo predtým mi to nerobilo. Lenže predtým t… poslední
msx. 14.01.2009 20:05
msx.

Snaz sa nepouzivat globalne premenne. Je to zly zvyk je z toho len chaos a bezpecnostne rizika. Da sa to aj bez nich.
Error ti hlasi mozno preto lebo si uz $a pouzil (echo), skus ju predtym nepouzit. Mozno potrebujes definovat $a ako global uz v tom hlavnom programe. Ked nie tak potom nejaky iny php expert ti to vysvetli, ja viac neviem :-)

Išiel som po riadkoch. Pred return vo funkcii si to hodnotu nepamätalo a po return v hlavnom kóde za volaním funkcie áno.

Edit:
Globálne funkcie tam používam preto, lebo je tam tak veľa parametrov, že som ich začal používať. Momentálne je to taký veľký kód už, že už to nemá zmysel meniť. Ďalším problémom je aj to, že v mnohých funkciách potrebujem aj 2 alebo 3 výstupné premenné. Teraz by som to možno aj inak robil, ale už je to jedno.

Zpět do poradny Odpovědět na původní otázku Nahoru