Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Jak pozyskać $$zmienną tablicową ?
iksigrek
post 12.09.2014, 00:43:36
Post #1





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 19.08.2009

Ostrzeżenie: (0%)
-----


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

Ten post edytował iksigrek 12.09.2014, 00:51:07
Go to the top of the page
+Quote Post
nospor
post 12.09.2014, 07:29:18
Post #2





Grupa: Moderatorzy
Postów: 36 447
Pomógł: 6292
Dołączył: 27.12.2004




Skoro to jest private, to poza obiektem nie masz do tego dostepu i koniec. Dlatego to się właśnie nazywa PRIVATE


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
iksigrek
post 14.09.2014, 19:53:18
Post #3





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 19.08.2009

Ostrzeżenie: (0%)
-----


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.

Ten post edytował iksigrek 14.09.2014, 20:09:20
Go to the top of the page
+Quote Post
ZaXaZ
post 14.09.2014, 20:50:39
Post #4





Grupa: Zarejestrowani
Postów: 285
Pomógł: 18
Dołączył: 30.01.2014
Skąd: <?=$_GET['city']?>

Ostrzeżenie: (0%)
-----


Cytat
(przy okazji - jak to się
nazywa dla zwykłych, nietablicowych
zmiennych, bo zapomniałem ;( ) ?

Zmienne zmienne.

Ten post edytował ZaXaZ 14.09.2014, 20:51:27


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 14.09.2014, 21:53:17
Post #5





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


  1. $a[1][2] = 'coś tam';
  2. $proxy = 'a[1][2]';
  3. echo eval("return \$$proxy;");
Go to the top of the page
+Quote Post
iksigrek
post 25.09.2014, 15:54:22
Post #6





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 19.08.2009

Ostrzeżenie: (0%)
-----


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 ?

Ten post edytował iksigrek 25.09.2014, 16:32:03
Go to the top of the page
+Quote Post
miki22
post 26.09.2014, 21:43:24
Post #7





Grupa: Zarejestrowani
Postów: 18
Pomógł: 2
Dołączył: 2.03.2012

Ostrzeżenie: (0%)
-----


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'

Ten post edytował miki22 26.09.2014, 21:47:25
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.04.2024 - 22:24