Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Usuwanie zmiennej
Forum PHP.pl > Forum > PHP
Pax95
Mam kod:
  1. public function offsetUnset( $offset )
  2. {
  3. $segments = explode( ".", $offset );
  4. $configPointer = &$this->config;
  5. foreach ( $segments as $segment )
  6. $configPointer = &$configPointer[$segment];
  7. }


Instrukcja unset( $configPointer ) spowoduje usunięcie referencji, zamiast elementu tablicy na jaki wskazuje.
lDoran
O ile dobrze się orientuję to referencja jest usuwana w momencie końca życia obiektu.
  1. $tab1 = $tab2;

Tworzy automatycznie referencję do tablicy i każda zmiana w $tab1 powoduje zmianę w $tab2, w związku z tym logiczne jest, że usuwając zmienną $tab1 usuwasz tablicę $tab2(czytaj zwalniasz miejsce w pamięci).
Pax95
Nawet jeśli referencja do tablicy tworzona jest bez użycia operatora wyłuskania (&), to założę się, że już do jej elementów tworzone będą kopie, zamiast referencji, więc mimo to jestem w kropce.
lDoran
Logiczne jest, że jeżeli $x jest referencją $y to $x wskazuje na miejsce w pamięci zajmowane przez $y. Jeżeli usuniesz miejsce w pamięci na które wskazuje $x usuniesz zmienną $y, ponieważ obie 'zmienne' korzystają z tego samego miejsca w pamięci.

EDIT:
W ogóle nie rozumiem jaki masz cel w kodzie tworząc referencję referencji(linia 4 i 6 na moje oko wskazują na to samo)
  1. public function offsetUnset( $offset )
  2. {
  3. $segments = explode( ".", $offset );
  4. $configPointer = &$this->config;
  5. foreach ( $segments as $segment )
  6. $configPointer = &$configPointer[$segment];
  7. }
Pax95
Jeśli jest kod:
$x = &$y;
To chcę usunąć wartość zmiennej $x mając do dyspozycji tylko $y.

Co chcę uzyskać? W klasie mam postrzępioną tablicę i chcę się do niej odwoływać przez:
$config["klucz1.klucz2.klucz3"], gdzie $config przechowuje obiekt implementujący ArrayAccess.
erix
Cytat
Instrukcja unset( $configPointer ) spowoduje usunięcie referencji, zamiast elementu tablicy na jaki wskazuje.

Teoretycznie, nieistniejąca zmienna, to jest - innymi słowy - null.

unsetem kasujesz referencję. PHP, niestety, nie ma operatora, który by pozwolił uzyskanie bezpośredniego adresu do zmiennej, na którą wskazuje referencja. Ale czemu by nie ustawić jej na null? winksmiley.jpg Też będzie zachowywać się jak usunięta, patrząc do dokumentacji dla isset:
Cytat
isset() will return FALSE if testing a variable that has been set to NULL

Czyli wydaje mi się, że moje myślenie jest prawidłowe. [;
Pax95
Miałem taki pomysł, a potem wywalać puste elementy, ale ostatecznie skorzystałem z eval(). Dzięki wszystkim za fatygę.
erix
Cytat
ale ostatecznie skorzystałem z eval()

Akysz! Po co Ci eval?
Pax95
Zamieniam klucz1.klucz2.klucz3 na [klucz1][klucz2][klucz3] i doczepiam do zmiennej.
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.