![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 78 Pomógł: 2 Dołączył: 13.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
piszę własny zaciemniacz kodu pod mój drobny projekt. Mam jednak problem z ukryciem wywołań standardowych funkcji, a dokładniej z ich wywołaniem... Założmy, że mam funkcję: preg_match_all($a, $b, $c); I nazwę funkcji otrzymuję z wywołania funkcji o przykładowej nazwie f('123', 'abc'), to aby ją wywołać musiałbym ją przechować w pośredniej zmiennej (coś w stylu f(..)($a, $b, $c) nie działa). Niestety taka możliwość nie zawsze występuje... więc trzeba się obyć bez tej zmiennej. W manualu php znalazłem takie cudo jak call_user_func. Po zaciemnieniu, wygląda to mniej więcej tak: call_user_func($f('123', 'abc'), $a, $b); Wszystko działa pięknie... do czasu. Jak się okazało, call_user_func nie jest w stanie przekazać trzeciego parametru przez referencję, więc wszystko mi się wysypuje. Zakładam, że w żaden sposób nie jestem w stanie zmusić call_user_func, aby się zachowywało tak jak należy, więc mam trochę inne pytanie. W jaki sposób mogę to zaciemnić? A może jestem w stanie wywołać jakoś inaczej funkcję otrzymując jej nazwę z innej funkcji? coś w stylu $funcName($a, $b, $c) działa idealnie, ale niestety nie wszędzie da się coś takiego zrobić... z góry dzięki za pomoc |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 61 Pomógł: 6 Dołączył: 15.07.2009 Skąd: Śląsk->Ruda Śląska Ostrzeżenie: (0%) ![]() ![]() |
Po co Ci właściwie zaciemniać kod? Bo trochę takiego działania nie rozumie.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 4 Dołączył: 1.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 78 Pomógł: 2 Dołączył: 13.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki, ale to zupełnie nie jest odpowiedzią na moje pytanie. Mam funkcję, która zwraca nazwę funkcji do wywołania i chce ją wywołac bez przechowywania jej nazwy w zmiennej nie korzystając z metod call_user_func~ ponieważ nie przekazują parametrów przez referencję (chociaż jedną z nich można do tego zmusic, ale musiałbym z góry wiedziec jak te parametry przekazywac co nie wchodzi w grę).
Potrzebuję czegoś w stylu:
Ten post edytował Snowak 27.07.2009, 12:23:52 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Moderatorzy Postów: 36 556 Pomógł: 6314 Dołączył: 27.12.2004 ![]() |
Cytat Wszystko działa pięknie... do czasu. Jak się okazało, call_user_func nie jest w stanie przekazać trzeciego parametru przez referencję, więc wszystko mi się wysypuje. Przeciez w manualu masz przyklad jak przekazac referencje: Cytat Przykład #1 call_user_func() example and references
<?php error_reporting(E_ALL); function increment(&$var) { $var++; } $a = 0; call_user_func('increment', $a); echo $a."\n"; call_user_func_array('increment', array(&$a)); // You can use this instead before PHP 5.3 echo $a."\n"; ?> -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]() ![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 27.07.2009 Skąd: Kalisz Ostrzeżenie: (0%) ![]() ![]() |
Może "zaciemniaczem" mogła by być funkcja "class_alias".
Nie zmieniasz nazwy klasy tylko odwołujesz się do jej aliasu. No ale wydaje mi się, że faktyczny zaciemniacz może wyglądać tak:
Cytat coś w stylu $funcName($a, $b, $c) działa idealnie, ale niestety nie wszędzie da się coś takiego zrobić... shit nie doczytałem Ten post edytował maroko 27.07.2009, 12:57:47 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 78 Pomógł: 2 Dołączył: 13.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
Prosiłbym wszystkich, aby doczytali dokładnie mojego posta. Przecież jeżeli mam funkcję, która zwraca nazwę funkcji do wywołania to może byc to cokolwiek i w kodzie nie mam absolutnie żadnego pojęcia do czego ona służy oraz jakie parametry przyjmuje. A więc tak jak mówiłem, call_user_func nie jest w stanie przekazac parametrów przez referencję tak jak należy a call_user_func_array wymaga WIEDZY, które parametry jak należy przekazac. Rozwiązanie $funcName($a, $b, $c) sprawdzałoby się idealnie, ponieważ samo przekazuje parametry przez referencję kiedy jest to wymagane, ale tak jak pisałem w 1szym poście - wymaga zastosowania tymczasowej zmiennej do przechowywania nazwy funkcji a ja potrzebuję operowac bezpośrednio na wyniku funkcji zwracającej nazwę funkcji do wywołania.
Ale i tak dzięki za chęci. Ten post edytował Snowak 29.07.2009, 00:48:47 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 27.04.2025 - 07:31 |