Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Nazwa zmiennej przekazanej do funkcji
Forum PHP.pl > Forum > PHP
Bastion
Czy da sie jakos pobrac nazwe zmiennej przekazanej do funkcji ?

  1. <?php
  2.  
  3. function foo($a)
  4. {
  5.  ....
  6. }
  7.  
  8. foo($zmienna);
  9.  
  10. ?>


wynikiem powinno byc wyswietlenie "zmienna", czyli nazwa a nie wartosc
Rozpalacz
A po co Ci tak kombinowac? Tworzysz nazwy zmiennych dynamicznie? Podaj przyklad takiego zastosowania to moze bedzie latwiej cos podpowiedziec.
Bastion
napisalem przeciez co chce uzyskac ... widocznie potrzebuje.
SoulRipper
Przekaz jako argument tablice asocjacyjna, a potem po wartosci pobierz index za pomoca funkcji key()

  1. <?
  2. $CFG['ind1'] = 123;
  3. function test($var)
  4. {
  5. $ret = key($var);
  6. return $ret;
  7. }
  8.  
  9. echo test();
  10. ?>
Bastion
Ciekawe rozwiazanie smile.gif Trzeba to przetestowac cool.gif
nospor
no to w takim razie mozna podac drugi parametr do funkcji, będący nazwą. no bo czym to się bedzie roznilo od budowania na tę konieczność tablicy?
  1. <?php
  2.  
  3. $zmienna = 2;
  4. function test($value, $name)
  5. {
  6. echo "Nazwa : $name  Wartosc: $value";
  7. }
  8.  
  9. echo test($zmienna, 'zmienna');
  10.  
  11. ?>
smile.gif
huntercs
albo:
  1. <?php
  2. $zmienna = 'bar';
  3.  
  4. function foo($value_name) {
  5. global $$value_name;
  6. echo "Nazwa : $value_name  Wartosc: ${$value_name}";
  7. }
  8.  
  9. echo foo('zmienna');
  10. ?>

rolleyes.gif
Bastion
trzeba bedzie wybrac najszybsze rozwiazanie smile.gif panowie - dziekuje biggrin.gif
techjaw
Odgrzeję już leciwego kotleta

mam prostą fukcję:
  1.  
  2. function p($zmienna) {
  3. echo '<pre>----------------------'.$tu_jakas_zmienna_rozna_za_kazdym_razem.'-----------------------------------'.(isset($_SERVER['REMOTE_ADDR']) ? '<br>' : PHP_EOL);
  4. print_r($zmienna);
  5. echo (isset($_SERVER['REMOTE_ADDR']) ? '<br>' : PHP_EOL).'---------------------------------------------------------</pre>'.(isset($_SERVER['REMOTE_ADDR']) ? '<br>' : PHP_EOL);
  6. }


Wywołuję ją:
logi($tu_jakas_zmienna_rozna_za_kazdym_razem);

chciałbym aby ta fukcja oprócz wyświetlenia zawartości zmiennej wyświetliła też nazwę. Macie jakiś pomysł?
nospor
A czemu nie uzyjesz podanych wyzej rozwiazan?
Tomplus
Produkuje wyimaginowane problemy, które zwykły programista nawet się nie pochyli, aby je rozwiązywać.
Pyton_000
Cytat(Tomplus @ 19.02.2021, 14:54:44 ) *
Produkuje wyimaginowane problemy, które zwykły programista nawet się nie pochyli, aby je rozwiązywać.

Ludzie na siłę tworzą takie potworki a potem się zastanawiają - a co to robiłoooo...
techjaw
Cytat(nospor @ 19.02.2021, 14:38:23 ) *
A czemu nie uzyjesz podanych wyzej rozwiazan?

Bo nie działają a dokładanie drugiego argumentu nie wchodzi w grę.

ja nie wywołuję foo('zmienna'); tylko foo($zmienna); gdzie nazwa zmienne za każdym razem inna.
Liczyłem że przez ostatnie 15 lat powstanie jakiś parametr/funkcja.
Pyton_000
Cytat(techjaw @ 20.02.2021, 19:16:17 ) *
Bo nie działają a dokładanie drugiego argumentu nie wchodzi w grę.

ja nie wywołuję foo('zmienna'); tylko foo($zmienna); gdzie nazwa zmienne za każdym razem inna.
Liczyłem że przez ostatnie 15 lat powstanie jakiś parametr/funkcja.

To może oświeć nas dlaczego chcesz taki potworek
gino
W php nie ma sposobu (dobrego) na zrobienie tego co chcesz zrobić, prawdopodobnie dlatego, że nie powinno się tego robić (gdyby można było, to byłaby odpowiednia funkcja). Nie wiem po co Ci to. Może jednak warto zmienić tok myślenia przy pisaniu Twojego kodu, napisz po co chcesz nazwę tej zmiennej, może da się do Twojego kodu podejść inaczej, prościej. Programuję tak na serio już z 10 lat, ale nigdy nie potrzebowałem znać nazwy zmiennej. Być może wszystko przede mną jeszcze, ale na to jak programuję a pisałem wiele rzeczy, nie widzę takiej potrzeby.
Tomplus
Nazwa zmiennej, nie ma znaczenia w działaniu kodu, więc jeżeli oczekujesz informację o nazwie zmiennej podczas wsadzania jej do funkcji to niestety nie uzyskasz jej - nie przypominam sobie aby inne języki programowania miały taką właściwość.

Jeżeli potrzebujesz nazwy którą chcesz dostarczyć do funkcji to użyj tablicy, gdzie klucz będzie nazwą.

@gino
Nie tylko Ty. Zacząłem zagłębiać się w programowanie 15 lat temu i tyle lat, i w projekty prywatne, i biznesowe nigdy taki problem u mnie nie występował, żeby nazwę zmiennej gdzieś zapisywać. Zawartość zmiennej była ważna.

techjaw
Już Panie i Panowie tłumaczę, ja programuję od 24 lat choć to nie istotne, wracając do tematu:

moja prosta funkcja nie robi nić innego jak w sposób czytelny pokazuje array poprzez print_r:
  1. function p($zmienna) {
  2. echo '<pre>----------------------'.$tu_jakas_zmienna_rozna_za_kazdym_razem.'-----------------------------------'.(isset($_SERVER['REMOTE_ADDR']) ? '<br>' : PHP_EOL);
  3. print_r($zmienna);
  4. echo (isset($_SERVER['REMOTE_ADDR']) ? '<br>' : PHP_EOL).'---------------------------------------------------------</pre>'.(isset($_SERVER['REMOTE_ADDR']) ? '<br>' : PHP_EOL);
  5. }

uźywam jej w kodzie wielokrotnie czasem jedna pod drugą :
p($options);
p($produkty_w_sklepie);
p($categories);

itd. problem w tym że przeglądając wyniki często zapominam jaki fragment odpowiada jakiej zmiennej np jak poniżej

--------------
sasdsdfd
dsaffd
afd
------------

--------------
hewiff\ef
ef
ef
ef
ef
afd
------------

--------------
sasdsdfd
dsaffdefeqfqf
qeefqewf
f
qewfqe
feq
fq
afd
------------

mając :
----- $options ---------
sasdsdfd
dsaffd
afd
------------

od razu wiedziałbym który blok której zmiennej dotyczy. Ot cała tajemnica smile.gif

Wiem, że mogę function p($zmienna, $nazwa) i wywołać p($categories, 'categories');
ale myślałem, że ktoś wpadł na pomysł jak to jednym parametrem załatwić.
Tak czy siak dziękuję za zajęcie stanowiska dyskusję.
viking
I po to wymyślono https://www.php.net/manual/en/function.debug-backtrace.php żebyś dokładnie wszystko wiedział.
Pyton_000
Cytat(viking @ 21.02.2021, 14:08:04 ) *
I po to wymyślono https://www.php.net/manual/en/function.debug-backtrace.php żebyś dokładnie wszystko wiedział.

I zaorane smile.gif
Tomplus
Ja rozumiem problem, skąd takie oczekiwanie na wynik, ale prawdę mówiąc oczekiwanie takiego wyniku:
przykład:

  1. $alfa = 'Foo';
  2. printMe($alfa); //alfa
  3. $beta = 'Bar';
  4. printMe($beta); //beta
  5. $gamma = '2000';
  6. printMe($gamma); //gamma
  7. printMe($alfa); //alfa


jest wg mnie zbędna.

Lepiej już przenosić sobie informację którą się da przenieść np. numer linii

  1. function printMe($content, $line, $file) {
  2. print_r([$file .':'. $line, $content]);
  3. }
  4.  
  5.  
  6. printMe('Foo', __LINE__, __FILE__);
  7. printMe('Bar', __LINE__, __FILE__);



I spełnia to warunek "od razu wiedziałbym który blok której zmiennej dotyczy"
trueblue
https://stackoverflow.com/a/21461983
techjaw
Cytat(trueblue @ 21.02.2021, 22:43:43 ) *


Dziękuję serdecznie, dokładnie w punkt smile.gif
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.