Witam, dzisiaj się spotkałem z dość nietypowym dla mnie zjawiskiem, otóż w swoim kodzie miałem taki zapis:
for ($tab as &$val)
{
...
}
i w dalszej części kodu potrzebowałem użyć zmiennej tymczasowej i nazwałem ją $val, po czym w dalszej części kodu zaczęły się dziać rzeczy które dziać się nie powinny... zaczęłem zastanawiać się o co chodzi i zaczęłem komentować różne partie kodu i doszedłem do wniosku, że kod w takiej postaci działa:
/*for ($tab as &$val)
{
...
}*/
a w takiej:
for ($tab as &$val)
{
/*...*/ // <-- zakomentowane wnętrze pętli
}
już nie!
oczywiście jedyna myśl, która człowiekowi przychodzi w takiej chwili to: WTF?
zatem zaczęłem sprawdzać o co chodzi, używając var_dump przed i po pętli doszedłem do wniosku, że ostatni element tablicy nie jest tym obiektem co powinien być tylko referencją do niego (ampersand& przed array (...)).
Po tym nie dużo czasu zajęło mi znalezienie jak poradzić sobie z tym "zjawiskiem".
Wystarczy poza pętlą pozbyć się referencji...
unset($val);
na pierwszy rzut oka wydawało mi się, że zapis ten usunie mi cały obiekt, jednak (na szczęście) zadziałał poprawnie.
I teraz pojawia się moje pytanie: Czy twórcy PHP w ogóle (k..a) wiedzą co to jest zakres zmiennych? Czy takie dziwolągi tego języka komukolwiek przynoszą korzyści?