[ Príspevkov: 3 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Ziskanie globalnej premennej

Registrovaný: 26.12.06
Prihlásený: 30.10.17
Príspevky: 4009
Témy: 181 | 181
Bydlisko: Nitra / Bra...
Vek: 24
NapísalOffline : 20.09.2010 18:23 | Ziskanie globalnej premennej

Zdravim,

v rámci funkcie potrebujem niekde v strede obsah premennej mimo funkcie.
logické je použiť zápis
Kód:
global $Premenna;


to by bolo v poriadku, lenže ja vopred neviem, čo za premennú to je. tak som si srpavil funkciu getglobal

Kód:
function getglobal($Varname){
   
    if(substr($Varname, 0, 1) == '$') $Varname = substr($Varname, 1);
   
    preg_match('#([a-zA-Z0-9]+)#', $Varname, $Var);
   
    global ${$Var{0}};
   
    if(preg_match_all('#\[(.*?)\]#', $Varname, $Matches)){   
     
      $Temp = ${$Var{0}};
     
      foreach($Matches{1} as $Key){
       
        $Temp = $Temp{$Key};
     
      }
   
    }else{
   
      $Temp = $Var;
   
    }
   
    return $Temp;
   
  }


to by bolo tiež v poriadku. funguje zápis

Kód:
getglobal('$Premenna');
getglobal('$Pole[index]');
getglobal('$Pole[index][index2]');


lenže nefungujú nasledujúce

Kód:
getglobal('$Trieda->Premenna');
getglobal('$Trieda->Funkcia()');
getglobal('$Trieda->SubTrieda->Funkcia()');


Viete mi prosím pomôcť? Alebo na to celé existuje nejaký lepší spôsob? Ďakujem


_________________
Sorry za prelkepy
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 13.11.07
Prihlásený: 20.08.16
Príspevky: 1719
Témy: 0 | 0
NapísalOffline : 20.09.2010 19:24 | Ziskanie globalnej premennej

A skúšal si $Trieda = getglobal('$Trieda'); a potom $Trieda->Premenna ... ? Inak uniká mi, prečo nemôžeš v tej funkcii použiť priamo global. Ak tam máš kód, ktorý to naozaj neumožňuje, tak to máš urobené zle a pravdepodobne by si to mal rozdeliť do viacerých funkcií (aby každá funkcia robila len jedinú činnosť).


Offline

Užívateľ
Užívateľ
Ziskanie globalnej premennej

Registrovaný: 26.12.06
Prihlásený: 30.10.17
Príspevky: 4009
Témy: 181 | 181
Bydlisko: Nitra / Bra...
Vek: 24
Napísal autor témyOffline : 21.09.2010 15:21 | Ziskanie globalnej premennej

no to bude fungovat, ale problem je, ze ja potrebujem uz navratovu hodnotu z toho $Trieda->Premenna alebo $Trieda->Funkcia()

skúšal som to rovnakým spôsobom ako je riešené to pole, teda
Kód:
preg_match_all('#\->([a-zA-Z0-9\(\)]*)#', $Varname, $Matches);

$Temp = ${$Var{0}};

foreach($Matches{1} as $Key) $Temp = $Temp->{$Key};


lenže pri '$Trieda->Funkcia()' mi to hodí chybu
Kód:
Notice: Undefined property: trieda::$Funkcia()


funguje to iba ak volam premennu, napr. $Trieda->Premenna

EDIT:

ok, ak nahradím cyklus
Kód:
foreach($Matches{1} as $Key){
        if(strpos($Key, '(') === FALSE){
          $Temp = $Temp->{$Key};
        }else{
          $Key = substr($Key, 0, -2);
          $Temp = $Temp->$Key();
        }
      }

tak to funguje, ale funkcie musia byť bez parametrov. to mi myslím nevadí, nepotrebujem parametre. pokiaľ niekto ešte na to nájde riešenie + lepšie od môjho, jeho kód je vítaný

chrono: ešte ten dodatok, potrebujem to kvôli potrebám jednej časti mini "parseru", a nechcem používať frameworky

EDIT 2:
alebo s evalom, to ma až teraz napadlo. tam môžem už trtnúť hocičo
Kód:
function getglobal2($Varname){
   
    preg_match('#([a-zA-Z0-9]+)#', $Varname, $Var);
   
    global ${$Var{0}};
   
    eval('$Temp = '.$Varname.';');
   
    return $Temp;
   
  }


verzia s evalom je dokonca o 24% rýchlejšia

(priemer z 10 merani po 100 000 opakovani na $Varname = '$Trieda->Funkcia()'; )


_________________
Sorry za prelkepy
 [ Príspevkov: 3 ] 


Ziskanie globalnej premennej



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

ziskanie javascriptovej premennej pre phpcko

v JavaScript, VBScript, Ajax

4

260

12.01.2010 18:11

djsulo

V tomto fóre nie sú ďalšie neprečítané témy.

Získanie hostingu == získanie IP adresy?

v Webhosting a servery

3

250

15.06.2013 18:28

majky358

V tomto fóre nie sú ďalšie neprečítané témy.

zistenie globalnej premenej

v PHP, ASP

3

353

15.04.2007 19:03

Gioel

V tomto fóre nie sú ďalšie neprečítané témy.

Získanie dát

v Pevné disky a radiče

12

655

11.08.2008 9:09

rooobertek

V tomto fóre nie sú ďalšie neprečítané témy.

Typo3 - ziskanie title

v Redakčné systémy

2

701

01.09.2010 23:57

Merlin_sk

V tomto fóre nie sú ďalšie neprečítané témy.

ziskanie neulozeneho dokumentu

v Ostatné programy

2

355

05.08.2009 11:22

ac.milan

V tomto fóre nie sú ďalšie neprečítané témy.

získanie údajov zo stránky

v PHP, ASP

1

242

28.12.2008 18:48

suchy

V tomto fóre nie sú ďalšie neprečítané témy.

získanie pôvodnej hodnoty dokumentu

v JavaScript, VBScript, Ajax

1

234

29.10.2009 19:25

GoodWill

V tomto fóre nie sú ďalšie neprečítané témy.

Získanie mena a hesla?!

v Ostatné programy

18

545

25.03.2016 19:09

michalesku

V tomto fóre nie sú ďalšie neprečítané témy.

Ziskanie dat z HDD

v Pevné disky a radiče

3

573

12.10.2010 9:34

f4r0

V tomto fóre nie sú ďalšie neprečítané témy.

[Java] Ziskanie zdrojaku stranky

v Assembler, C, C++, Pascal, Java

1

309

09.12.2008 8:18

p360t

V tomto fóre nie sú ďalšie neprečítané témy.

Java - ziskanie location ID

v Assembler, C, C++, Pascal, Java

0

155

12.03.2012 18:30

masloslayer

V tomto fóre nie sú ďalšie neprečítané témy.

ziskanie dat z grafu

v Grafické programy

1

79

24.10.2013 14:30

shiro

V tomto fóre nie sú ďalšie neprečítané témy.

ziskanie textu DIV elementu

v JavaScript, VBScript, Ajax

2

492

14.09.2007 19:44

Bananslovak

V tomto fóre nie sú ďalšie neprečítané témy.

wordpress: ziskanie konkretneho post/page

v Redakčné systémy

2

107

20.09.2014 9:53

hatto13

V tomto fóre nie sú ďalšie neprečítané témy.

ziskanie zdrojoveho kodu z exe

v Assembler, C, C++, Pascal, Java

16

2096

15.02.2009 20:03

programator



© 2005 - 2017 PCforum, edited by JanoF