Ważna uwaga:
$GLOBALS
są brudne i złe. Nie używaj ich. Zawsze. Nigdy przenigdy.
Proszę skupić się na fakt, że to nie działa, a nie dlaczego robisz to w pierwszej kolejności, to czysto teoretyczne pytanie o ćwiczenia techniczne.
To jest dość dziwne. Próbuję skonstruować zmienną za pomocą ciągu o nazwie $GLOBALS
.
Od zasięgu globalnym
Zobaczmy, co możemy uzyskać, gdy var_dump()
ing to w zasięgu globalnym.
$g = sprintf('%s%s%s%s%s%s%s', chr(71), chr(76), chr(79), chr(66), chr(65), chr(76), chr(83));
var_dump($$g);
Wynik jest tablicą zmiennych globalnych, które można zobaczyć here. Wspaniały! Więc spróbujmy tego w funkcji.
Z zakresu funkcji
Pierwszy, po prostu upewnij się, że rzeczywiście możemy uruchomić sprawdzanie wewnątrz funkcji $GLOBALS
.
function globalAllTheThings()
{
var_dump($GLOBALS);
}
globalAllTheThings();
wynik jest: działa !! Możesz zobaczyć to here.
Teraz wypróbujmy pierwszy test, którego użyliśmy w zasięgu globalnym, w ramach funkcji i zobaczmy, co się stanie.
function globalAllTheThings()
{
$g = sprintf('%s%s%s%s%s%s%s', chr(71), chr(76), chr(79), chr(66), chr(65), chr(76), chr(83));
var_dump($$g);
}
globalAllTheThings();
Dla uproszczenia sake
Można również spróbować tej bez upiorny zaciemniania (nie pytajcie).
function globalAllTheThings()
{
$g = 'GLOBALS';
var_dump($$g);
}
globalAllTheThings();
To zwraca NULL
. O co chodzi? Dlaczego zwraca NULL
i co mogę zrobić, aby to zadziałało. Dlaczego pytasz? Oczywiście do celów edukacyjnych i dla nauki!
Dla uproszczenia, nie możesz napisać '$ g = 'GLOBALS'' zamiast swojego dziwnego' sprintf-chr'? Nie powinno to wpływać na wynik. Gdyby tak było, byłoby wart całe, jeszcze inne pytanie. – deceze
Ponieważ jest PHP. –
Ponieważ '$ {'string'}' szuka zmiennej w podanym zakresie. – Leri