Globalna zmienna w "create_function" bez wartości

0

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.

0
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ł

0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1