Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kłopotliwe przekazywanie zmiennej
Forum PHP.pl > Forum > Przedszkole
Maxie
Witam. Mam malutki kłopot z "przekazaniem" zmiennej. Jestem zdania, że większość problemów już się przez internet przetoczyła i można znaleźć szybko rozwiązanie. Natomiast nie miałem pojęcia jak ładnie sformułować mój problem (chociaż starałem się i w ciemno szukałem) smile.gif . Już zabieram się za przedstawienie problemu. Ogółem mam dwie klasy Page i Resources. Wygląda to mniej więcej tak:
  1. class page{
  2.  
  3. var $title = DefaultTitle;
  4. var $subpage = false;
  5. var $folders = 0;
  6.  
  7. }
  8.  
  9. class resource{
  10. public static function load($url){
  11.  
  12. $ext = pathinfo($url, PATHINFO_EXTENSION);
  13.  
  14. if (filter_var($url, FILTER_VALIDATE_URL) === FALSE) {
  15.  
  16. for($folders = $page->folders; $folders > 0; $folders--){
  17. $additional .= "../";
  18. }
  19.  
  20. $file = $additional."resources/".$ext."/".$url;
  21.  
  22. }else{
  23.  
  24. $file = $url;
  25.  
  26. }
  27.  
  28. if($ext == "js"){
  29.  
  30. echo '<script src="'.$file.'" type="text/javascript"></script>';
  31.  
  32. }elseif($ext == "css"){
  33.  
  34. echo '<link href="'.$file.'" rel="stylesheet" type="text/css">';
  35.  
  36. }
  37. }
  38. }

Następnie w kodzie strony tworzę zmienną new page:
  1. $page = new page;
  2. $page->folders = 2;
  3.  
  4. resource::load("plik.css");

Muszę jakoś uzyskać dostęp do zmiennej $page->folders w funkcji resource::load() bez przekazania zmiennej w argumentach. ^ Ten przykład nie działa właśnie ze względu na to, że zmienna $page->folders według funkcji load() nie istnieje... Jak sobie poradzić z tym problemem?
nospor
1) Uzywaj poprawnego bbcode. Do kodu PHP jest to bbcode PHP a nie CODE!
2) Problem z obiektowka nie ma zadnego zwiazku. przenosze
3) Poczytaj podstawy. W tym przypadku jest to zasieg zmiennych
tomxx
Cytat
zmienna $page->folders według funkcji load() nie istnieje
Nie istnieje, bo wewnątrz funkcji zmienne lokalne (czyli takie, do których wartości zostały przypisane poza funkcją) nie są dostępne. O zasięgu zmiennych przeczytasz tutaj.
W skrócie - aby dostać się do zmiennej lokalnej wewnątrz funkcji, należy użyć polecenia global.
Wstaw taką linijkę na początku funkcji:
  1. public static function load($url){
  2. global $path;
  3. $ext = pathinfo($url, PATHINFO_EXTENSION);
Dalej już normalnie.
Dzięki temu zmienna $path będzie dostępna wewnątrz tej funkcji i będziesz mógł z niej korzystać.
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.