Witam.
mały zarys:
$zmienna = 1;
create_function('$m', "global $zmienna; return func($zmienna);");
Dlaczego zmienna globalna w tej funkcji jest bez wartości skoro ustawiona jest globalnie? Nie mogę użyć funkcji anonimowej.
Witam.
mały zarys:
$zmienna = 1;
create_function('$m', "global $zmienna; return func($zmienna);");
Dlaczego zmienna globalna w tej funkcji jest bez wartości skoro ustawiona jest globalnie? Nie mogę użyć funkcji anonimowej.
dommin napisał(a):
Nie mogę użyć funkcji anonimowej.
przecież create_function
tworzy właśnie funkcję anonimową
czego konkretniej nie możesz użyć i czemu?
nie wiem czemu to nie działa, ale ogólnie zmienne globalne to zły pomysł
aha już wiem czemu
bo zmienne w "
są automatycznie rozwijane
tym sposobem dostajesz:
create_function('$m', "global 1; return func(1);");
zamień cudzysłów ("
) na apostrof ('
)
tworzenie funkcji w ten sposób to niejawne użycie eval
a jak wiesz eval
is evil
. Jeśli pozwolisz użytkownikowi w jakiś sposób zmodyfikować ciało funkcji (tak jak w powyższym przypadku za pomocą zmiennej) to pozwalasz mu również wykonać na Twoim serwerze dowolny kod php
poza tym funkcje stworzone w ten sposób nie są sprawdzane na starcie tylko dopiero w czasie wykonania, nie podlegają też automatycznej refaktoryzacji
więc jeszcze raz: NIE TWÓRZ FUNKCJI W TEN SPOSÓB