Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Uzycie zmiennych poza funkcją
Forum PHP.pl > Forum > PHP
Leniobitz
Witajcie,
W kilku miejscach aplikacji którą piszę używam tych samych zmiennych przekazanych metodą POST. Dla wygody skracam je, np:

  1. $ID = $_POST['id'];


Postanowiłem więc napisać sobie funkcję shorter(), w której wykonuje to samo, a następnie wywołuję ją sobie w innej funkcji i używam skróconych form. Jednak zmienne nie są przekazywane pomiędzy funkcjami, mimo użycia global.

  1. function shorter()
  2. {
  3. $name=$_POST['name'];
  4. $mail = $_POST['mail'];
  5. $login = $_POST['login'];
  6. $password = $_POST['password'];
  7. global $name, $mail, $login, $password;
  8. }

nospor
http://php.net/manual/en/language.variables.scope.php
Zobacz kiedy oni uzywają global a kiedy Ty
Leniobitz
Próbowałem wcześniej najpierw dać global, ten sam efekt: "Undefined variable: mail in.."
Turson
Jak w shoter definiujesz zmienną, a chcesz ją użyć poza nią, to bezpośrednio przez użyciem dajesz global $zmienna
Leniobitz
Nie do końca, bo bazując chociażby na linku zamieszczonym przez Nospora:
  1. <?php
  2. $a = 1;
  3. $b = 2;
  4.  
  5. function Sum()
  6. {
  7. global $a, $b;
  8.  
  9. $b = $a + $b;
  10. }
  11.  
  12. Sum();
  13. echo $b;
  14. ?>


Co ciekawe, jezeli zrezygnuje z z uzywania funkcji shorter, a po prostu wstawie jej treść bezpośrednio do tej drugiej funkcji, wszystko dziala jak trzeba.
Turson
Umieść
$name=$_POST['name'];
$mail = $_POST['mail'];
$login = $_POST['login'];
$password = $_POST['password'];
przed funkcjami
a w funkcji użyj global $name itd
Leniobitz
Chodzi mi jednak o to, żeby były w jednej funkcji definiowane, w drugiej używane. Pewnie, moge je zadeklarować po za funkcją, ale w momencie kiedy nie ma wszystkich POST'ow, wywala błędy.
b4rt3kk
Może użyj referencji?

  1. $a = 10; // wartość 10
  2.  
  3. function set(&$a) {
  4. $a = $_POST['a'];
  5. }
  6.  
  7. set($a);
  8.  
  9. echo $a; // wartość z $_POST
Turson
  1. function shorter()
  2. {
  3. $name=$_POST['name'];
  4. $mail = $_POST['mail'];
  5. $login = $_POST['login'];
  6. $password = $_POST['password'];
  7. }
  8. function nowa()
  9. {
  10. global $name, $mail, $login, $password;
  11. //wykorzystanie zmiennych
  12. }
em1X
Sam fakt, że musicie użyć global, świadczy o mierniźnie kodu. Może lepiej zainteresować się już jakąś klasą ze statycznymi metodami?
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.