Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak pozyskać $$zmienną tablicową ?
Forum PHP.pl > Forum > PHP
iksigrek
Czy da się pozyskać zmienną tablicową z nazwy podanej w zmiennej (przy okazji - jak to się nazywa dla zwykłych, nietablicowych zmiennych, bo zapomniałem ;( ) ?

Chodzi mi o to, że działa to:

  1. $a = 'coś tam';
  2. $proxy = 'a';
  3. echo $$proxy;


ale to już nie:

  1. $a[1][2] = 'coś tam';
  2. $proxy = 'a[1][2]';
  3. echo $$proxy;


bo parser nie widzi zmiennej, a chciałbym użyć właśnie tej drugiej opcji... Da się to jakoś obejść i wyłuskać zmienną tablicową ? W sumie to konkretniej chodzi o $this->tablicowe dla obiektu, który używa zmiennej z zasięgiem private. Chcę ją pozyskać metodą sprawdzającą wcześniej czy można pobrać takiego private i do tego ma być to zmienna z tablicy.

Heh, już tak dawno w PHP nie pisałem, że jeśli coś niejasno wyraziłem w poście, to sorry wink.gif
nospor
Skoro to jest private, to poza obiektem nie masz do tego dostepu i koniec. Dlatego to się właśnie nazywa PRIVATE
iksigrek
Dobra, to poproszę o czytanie ze zrozumieniem. Proszę również o odpowiedź przed przeczytaniem drugiej części pytania (dot. obiektu). Może niepotrzebnie napisałem, że chcę to użyć w obiekcie. No ale jak już jest, to niech zostanie. Może ktoś, kto ewentualnie ma pomysł jak to obejść w tym wypadku i domyśla się po co mi dostęp selektywny do private pomoże. Ogólnie jednak - nie ma znaczenia czy z obiektu i czy to private czy nie private (można się domyślić po tym, że pierwszy przykład działa, a gdyby obie były private, to nie powinien).Podstawowe pytanie brzmi jak taką zmienną pozyskać (tablicową) w opisany $$sposób, np. z pliku index.php po prostu, bez stosowania funkcji, obiektów, czy czego kolwiek innego poza wklejonym kodem. bo podany powyżej przykład był testowany właśnie w taki sposób.
ZaXaZ
Cytat
(przy okazji - jak to się
nazywa dla zwykłych, nietablicowych
zmiennych, bo zapomniałem ;( ) ?

Zmienne zmienne.
Pyton_000
  1. $a[1][2] = 'coś tam';
  2. $proxy = 'a[1][2]';
  3. echo eval("return \$$proxy;");
iksigrek
Dzięki ZaXaZ i Pyton_000 very mocz.

Pyton_000, na czym polega myk z

Kod
echo eval("return \$$proxy;");


zamiast

Kod
eval("echo $$proxy;");


(oba działają ok) ?

Robisz przez zwróconą przez eval zmienną zamiast po prostu echo zmiennej w eval ze względu na mój przykład dla zastosowania w obiekcie, w celu ewentualnej dodatkowej validacji zawartości evala czy chodzi o coś jeszcze innego ?
miki22
Cytat(Pyton_000 @ 14.09.2014, 22:53:17 ) *
  1. $a[1][2] = 'coś tam';
  2. $proxy = 'a[1][2]';
  3. echo eval("return \$$proxy;");

Sprytny pomysł! (choć z nadużywaniem eval bym był ostrożny).
Jak rozumiem chodzi o coś takiego w rozpisaniu:
$a[1][2] = 'coś tam' // bo to ostatecznie chcesz podstawić
$proxy = 'a[1][2]'; // nieprzetwarzana (w apostrofach!) robocza zmienna która będzie służyła jako nazwa zmiennej zmiennej
$proxy2 = "\$$proxy"; // przetworzona zmienna (bo w cudzysłowiu) w której dzięki '\' parser traktuje pierwszy znak '$' jako po prostu znak a $proxy jako zmienną i zamienia na to co jest w zmiennej proxy czyli a[1][2]. Dzięki temu w zmn $proxy2 masz ciąg znaków (!) $a[1][2].
Jakbyś teraz po prostu użył echo $proxy2 to by wyświetliło tekst $a[1][2]. Ale w eval($proxy2) wykona ten ciąg znaków czyli podstawi 'coś tam'
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.