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()'; )