Autor | Zpráva | ||
---|---|---|---|
midlan Profil |
#1 · Zasláno: 20. 7. 2013, 22:19:01
Ahoj,
neví někdo jestli je v php nějak možné převést anonymní funkci na normální? Aby funkce v proměnné šla poté zavolat klasicky přes fce(); . Potřebuji to, protože funcki bych rád při vytvoření předal nějakou proměnnou z vnějšího prostředí pomocí use .
|
||
Jan Tvrdík Profil |
#2 · Zasláno: 20. 7. 2013, 22:20:49
Nějaký konkrétní příklad by nebyl? Možná hledáš
__invoke , možná create_function. Těžko říct.
|
||
midlan Profil |
#3 · Zasláno: 20. 7. 2013, 22:33:30
Jan Tvrdík:
Chci předat objekt, se kterým by mohla pracovat při každém volání. Konrétně bych chtěl udělat "zkratku" pro volání metody onoho objektu, takže bych potřeboval něco jako: function fce($param) use ($object) { return $object->method($param); } |
||
Jan Tvrdík Profil |
#4 · Zasláno: 20. 7. 2013, 22:39:18
midlan:
Pokud to dobře chápu, tak si vyrábíte chybu v návrhu. Řešení může vypadat třeba takto. $GLOBALS['object'] = $object; // globální registr, fuj function fce($param) { return $GLOBALS['object']->method($param); } Nepoužívejte to, děkuji. |
||
midlan Profil |
#5 · Zasláno: 20. 7. 2013, 22:43:58
Jan Tvrdík:
Ano přesně tohle potřebuji, $object proměnná je v globálním prostředí, takže až na první řádku je to to "správně". Schválně to píšu v uvozovkách, protože pole $GLOBALS nikde nepoužívám. Jinak to vyřešit nejde? |
||
Jan Tvrdík Profil |
#6 · Zasláno: 20. 7. 2013, 23:09:40
midlan:
Obecně platí, že všechno globální (tj. i statické) je z pohledu návrhu zlo, které na určitých místech tolerujeme (třeba proto, že to v daném jazyku nelze vyřešit neglobálně), ale to nic nemění na tom, že to není dobré. Takže mít jakoukoliv proměnnou v globálním prostředí je špatně. Stejně tak je špatně mít funkci, který natvrdo závisí na nějaké globální proměnné. Správné „neglobální“ řešení (pominu-li to, že dost možná je blbost už samotný problém, který řešíš) by mohlo vypadat třeba takto: function createFce($object) { return function ($param) use ($object) { return $object->method($param); }; } Tedy máš továrničku na tu funkci, která vrátí tu funkci zafixovanou na daný objekt. Na tobě je pak zajistit, že vytvořená funkce je korektně předána všem, kdo ji potřebují (např. pomocí dependency injection). |
||
midlan Profil |
#7 · Zasláno: 20. 7. 2013, 23:43:45
Jan Tvrdík:
„Obecně platí, že všechno globální (tj. i statické) je z pohledu návrhu zlo, které na určitých místech tolerujeme (třeba proto, že to v daném jazyku nelze vyřešit neglobálně), ale to nic nemění na tom, že to není dobré.“ Tohle moc nechápu, já mám v globálním prostředí v podstatě jen objekty a ty pak předávám tam, kde jsou potřeba (dependency injection), nevím co je na tom špatného. Jan Tvrdík: „dost možná je blbost už samotný problém, který řešíš“ Teď nad tím přemýšlím a máš pravdu. Mělo se jednat o zkratku, na vytvoření přkládací funkce t() (šlo o ten ultrakrátký zápis), ale tu už vlastně skoro nikde nepoužívám, protože vše řeší můj šablonovací systém a ten akceptuje pro překládání callbacky takže to nebude problém. Omlouvám se za zmařený čas. |
||
peta Profil |
#8 · Zasláno: 22. 7. 2013, 14:59:07
Kdybych byl hacker, tak si necham zobrazit celou tvou globalni promennou. Cili, hesla k mysql, hesla k ftp, hesla uzivatele a ja nevim, co vechno tam jeste mas. Tez snadno pak zmenis nastaveni. Treba mas promennou prava, ktera urcuje, co uzivatel muze a nemuze. tak se prihlasis jako bezny uzivatel, zmenis si prava a razem na to nejaka funkce zareaguje tak, ze zobrazi vse, co adminovi.
Podle meho je idealni to hnedka nasoukat do objektu a zabezpecit, tusim, pres private. |
||
midlan Profil |
#9 · Zasláno: 24. 7. 2013, 00:33:07
peta:
„Kdybych byl hacker, tak si necham zobrazit celou tvou globalni promennou. Cili, hesla k mysql, hesla k ftp, hesla uzivatele a ja nevim, co vechno tam jeste mas.“ Bohužel pro heckara, nic takového tam nemám. Jsou tam jen zapouzdřené objekty. Po přeroutování url se skripty, na které ukazuje routovaná url, spouští v anonymní funkci, takže také nic nezapíší do globálního prostředí. |
||
Jan Tvrdík Profil |
#10 · Zasláno: 24. 7. 2013, 01:15:44
peta:
„Podle meho je idealni to hnedka nasoukat do objektu a zabezpecit, tusim, pres private.“ Nešiř bludy peta. Účel private rozhodně není zabezpečit cokoliv před hackery.
|
||
shaggy Profil |
#11 · Zasláno: 24. 7. 2013, 07:58:07
peta:
„Kdybych byl hacker, tak si necham zobrazit celou tvou globalni promennou.“ Ako? To môžeš rovno napísať, že keby si bol hacker, tak si necháš na akomkoľvek webe zobraziť prihlasovacie údaje do db (keď sa vieš dostať ku globálny premenným, budeš sa vedieť dostať k akýmkoľvek). |
||
Časová prodleva: 5 dní
|
|||
peta Profil |
#12 · Zasláno: 29. 7. 2013, 08:12:08
shaggy: Dyt jo. Jde mi spis o to, ze se normalne pojmenovavaji glovalni promenne jako config, cfg. Pak mit v php diru treba pres vstupni promenne takovou ($_POST, $_GET), ze staci do ni pridat prikaz print_r($CONFIG). Dalsi operace uz pak provadim legalne pod prihlasovacimi udaji admina webovymi nastroji jako phpmyadmin, ftp.
|
||
Časová prodleva: 4 dny
|
|||
midlan Profil |
#13 · Zasláno: 1. 8. 2013, 23:33:56
peta:
„($_POST, $_GET), ze staci do ni pridat prikaz print_r($CONFIG)“ Opravdu máš někde něco jako eval($_POST['whatever']) ? Potom by bylo úplně jedno co máš v globálním prostředí.
|
||
Časová prodleva: 11 let
|
0