Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]referencje - sesja, prośba o wyjaśnienie
Forum PHP.pl > Forum > Przedszkole
wpaski
Nie rozumiem tego kawałka kodu

  1.  
  2. $pathParts = array (
  3. 0 => 'autoryzacja',
  4. 1 => 'autoryzacja/idZalogowanego',
  5. 2 => 'autoryzacja/hashZHasla',
  6. );
  7.  
  8.  
  9. $path = $pathParts[1];
  10.  
  11. $paths = explode('/', $path);
  12.  
  13. $current = &$_SESSION;
  14.  
  15. foreach($paths as $key) {
  16. $current = &$current[$key];
  17. }
  18.  
  19. // echo 'current';
  20. // echo "<pre>";
  21. // print_r($current);
  22. // echo "</pre>";
  23.  
  24.  
  25. $current = 'jakas wartosc';
  26.  
  27. echo 'sesja na koncu';
  28. echo "<pre>";
  29. print_r($_SESSION);
  30. echo "</pre>";


w jaki sposób utworzona została utworzona ta tablica?

wydaje mi się, że rozumiem kod do tego momentu:
  1. $current = &$_SESSION;

tutaj jest referencja więc sesja zawiera to co zmienna $current

nie rozumiem tego kawałka:
  1. $current = &$current[$key];


i w jaki sposób $_SESSION dalej wskazuje na $current skoro powstała nowa referencja?
czemu print_r($current); pokazuje konkretną wartość a nie tablicę?

Jak by ktoś mógł mi to rozjaśnić (opisać powyższy kod) byłbym wdzięczny.
nospor
Cytat
tutaj jest referencja więc sesja zawiera to co zmienna $current
No wlasnie nie
Jak masz $zm = 2; to zmienna zawiera 2 a nie 2 zawiera $zm.
Dokladnie tak samo jest w twoim przykladzie i to nei sesja zawiera current tylko $current zawera wskaznik do tablicy sesji
wpaski
okej, ale w gruncie rzeczy jakakolwiek zmiana w $_SESSION ma swoje odzwierciedlenie w zmiennej $current, no i dalej nie rozumiem tego co dalej się dzieje wkodzie, już po tej linijce

w jaki sposób 1 => 'autoryzacja/idZalogowanego', "zamienia się na tablicę" w której autoryzacja jest kluczem nadrzędnym do tablicy z kluczem idZalogowanego i wartością jakas wartosc
nospor
Ok, kod z komentarzem:

  1. $pathParts = array (
  2. 0 => 'autoryzacja',
  3. 1 => 'autoryzacja/idZalogowanego',
  4. 2 => 'autoryzacja/hashZHasla',
  5. );
  6.  
  7.  
  8. $path = $pathParts[1]; //pobranie tekstu autoryzacja/idZalogowanego
  9.  
  10. $paths = explode('/', $path); //explode rozbija tekst autoryzacja/idZalogowanego na tablice o elementach autoryzacja oraz idZalogowanego - patrz manual
  11.  
  12. $current = &$_SESSION; //$current wskazuje na cala tablice session
  13.  
  14. foreach($paths as $key) { //lecim sobie teraz po sciezce
  15. $current = &$current[$key]; //i current wskazuje coraz glebiej w tablicy sesji
  16. }
  17.  
  18. //po wyjsciu z petli $current wskazuje na ostatni element w sesji z zadanej sciezki
  19.  
  20. // echo 'current';
  21. // echo "<pre>";
  22. // print_r($current);
  23. // echo "</pre>";
  24.  
  25.  
  26. $current = 'jakas wartosc'; //teraz przypisujac cos do current przypisuje w rzeczywistosci do wskazanego wczesniej elementu w sesji
  27.  
  28. echo 'sesja na koncu';
  29. echo "<pre>";
  30. print_r($_SESSION);
  31. echo "</pre>";
wpaski
dzięki, a nie rozumiem jeszcze jednego dlaczego w 15 linijce:
  1. $current = &$current[$key];


musi być też referencja? bez niej kod nie działa prawidłowo. Dlaczego bez niej $current nie wskazuje na $_SESSION skoro wcześniej było już to robione (linijka 12)?
nospor
Na poczatku $current wskazuje na poczatek tablic session. Pozniej przez kolejne wskazniki schodzimy w glab sesji gdy interesuje nas to co jest w srodku
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.