Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobieranie nazwy zmiennej przekazywanej do funkcji
Forum PHP.pl > Forum > PHP
treewood
Czy wiecie jak sprawdzic jaka nazwa zmiennej byla wrzucona do funkcji?

przyklad:

  1. <?php
  2.  
  3. function throwSomething( $iSomething, $sNameOfVariable ){
  4. ....
  5. }
  6.  
  7. $iNameOfVariable = 1;
  8.  
  9. echo throwSomething( $iNameOfVariable, 'iNameOfVariable' );
  10.  
  11. ?>


tutaj musze przekazywac nazwe zmiennej czy jest mozliwosc obejscia tego?
czyli jak w funkcji sprawdzic jaka nazwa zmienna a takze jej wartosc zostala przekazana do funkcji
j00seph
Hmm...

Wyciagniecie nazwy parametru fnkcji - nie wydaje mi sie aby to było możliwe -chodziaż moge się mylić.
A nawet jeśli to jest możliwe to nie widzę w tym żadnego sensu...

Jeśli możesz rozwiń bardziej ten temat - co chcesz dokładnie zrobić i na co ci wyciąganie z funkcji
treewood
patrz ... masz funkcje
  1. <?php
  2.  
  3. function delRow( $sTable, $sId, $iId ){
  4.  mysql_query( 'DELETE FROM '.$sTable.' WHERE '.$sId.'='.$iId );
  5. }
  6.  
  7. ?>


zamiast przekazywac nazwe pola po ktorym ma byc weryfikowane usuwanie to mozna po prostu wcisnac zmienna i nazwa zmiennej to nazwa pola a wartosc zmiennej to wartosc pola.

takich przykladow mozna mnozyc ... przyklad wymyslony na szybko
kszychu
Użyj tablicy. Z niej łatwo wyciągniesz indeks komórki.
Seth
Nazw zmiennych przeslanych do funkcji nie mozna pobrac (a przynajmniej nie znalazlem nic na ten temat) ale mozesz pobrac ich wartosci przez func_get_args()" title="Zobacz w manualu PHP" target="_manual
treewood
krzychu - jej bez jaj po co sobie utrudniac zycie i wrzucac tablice i tworzyc ja do tego trzeba by jeszcze jakas funkcje zapodac, ktore wyszykuje danego indeksu ...

Seth - dzieki ale to juz znam
hawk
Nie sądzę abyś to znalazł. Bo jest to bardzo niebezpieczne. Że tak powiem, evil. Nazwa zmiennej to nazwa - można sobie zmieniać i robić co się komu podoba. I nie powinno to psuć kodu.
Co nie znaczy że nie może się to kiedyś przydać. Ale ponieważ ogólnie jest to rzecz z kategorii evil, więc raczej nie będzie tego w żadnym języku.
treewood
eval( ); tez nie jest raczej zbyt bezpieczna funkcja ...

uwazam, ze to glupie gadanie ... uzywa sie czegos wtedy jesli sie tego umie uzywac ... a jesli sie nie umie to sie robi safe mode, limit czasu wykonania, register_globals, error_reporting i wiele innych restrykcji
rogrog
był już taki topic, dokladnie taki sam

popatrzcie na jedną rzecz - parametry są do funkcji przekazywane przez wartość

dla php [na poziomie wykonywanej funkcji] nie ma przecież różnicy

  1. <?php
  2.  
  3. function x($y){
  4. }
  5.  
  6. // nie ma roznicy czy jest
  7. $foo = 1;
  8. x($foo);
  9.  
  10. //czy np.
  11. x(1);
  12.  
  13. ?>


a to dlatego że przekazywana jest tylko wartosc...
pp-layouts
otóż ja widzę zastosowanie czegoś takiego - powiedzmy, że potrzebuję funkcji, która szybko przetworzy mi dowolną listę parametrów.

przykład z życia, czyli kodu który aktualnie robię:

$name = ..............
$email = ..............
$message = .............
(itede itede, jest jeszcze kilka takich)

na końcu jest $db->query("insert into tabela ( name, email, message .... ) values ( $name, $email, $message ...... );

oczywiście pomiędzy jednym a drugim musi, ze względów bezpieczeństwa znaleźć się coś w stylu:

$name = mysql_real_escape_string($name);
$email = mysql_real_escape_string($email);
....
itede...

takie powtarzanie kodu jest evil. wiem, mogę wrzucić pola do tablicy i grzecznie przetworzyć tablicę, ale czy nie byłoby prościej i przyjemniej, gdybym mógł użyć funkcji $db->escape(&$name, &$email, &$message) ?

próbowałem stworzyć taką funkcję, ale niestety php ma tutaj ograniczenie, bo jeśli używam tablicy func_get_args, to zawiera ona tylko kopie argumentów, tak więc zawartość argumentów nie ulegnie zmianie. gdyby tak klucze tablicy func_get_args zamiast numerków zawierały nazwy zmiennych - wtedy wszystko działałoby ok.

i to wcale nie jest evil - bo kod nie ma się jak wysypać. cokolwiek zostanie użyte jako argument, zostanie przetworzone (lub nie, jeśli podano bez &)

a może jest tu h4x0r który potrafi taką cudaczną funkcję zrobić? ;>

eee...
teraz mi głupio, bo się okazuje, że jest obejście proste jak drut:

CODE

<?

function test($array) {
foreach ( $array as $n=>$v ) {
$array[$n] = strtolower($v);
}
}

$a = 'RAZ'; $b = 'DWA'; $c = 'TRZY';
test(array(&$a, &$b, &$c));

echo "a=$a, b=$b, c=$c";

?>
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.