Markuz Opublikowano 12 Sierpnia 2010 Udostępnij Opublikowano 12 Sierpnia 2010 Mam taką sobie klase : class themeFunctions { public $file; function changeFileTheme($name) { $this->file = $name; } function showFileTheme() { require_once('theme/theme-'.$this->file.'.php'); } } Teraz chce wyswietlic dany plik : $themeFunctions -> changeFileTheme("register"); $themeFunctions -> showFileTheme(); Plik sie wyswietla ale zmienne juz nie , tzn. w tym załączonym pliku pisze np. echo $zmienna; A w kodzie przed wyświetleniem pliku jest $zmienna=5; To nie wyświetla się 5 , zmienna nie istnieje nawet. Proszę o pomoc :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 12 Sierpnia 2010 Administratorzy Udostępnij Opublikowano 12 Sierpnia 2010 Rozumiem, że masz tak: $zmienna = 5; $themeFunctions -> changeFileTheme("register"); $themeFunctions -> showFileTheme(); Błąd jest oczywisty. Plik przez require jest wczytywany tylko do metody (tak jakby wstrzyknięcie kodu), zatem ma dostęp tylko do zmiennych w zasięgu metody i do zmiennych klasy. Czyli do $this; Swoją zmienną musisz przekazać do obiektu klasy themeFunctions, żeby była tam dostępna. Ja zrobiłbym to tak: class themeFunctions { public $file; private $data = array(); function changeFileTheme($name) { $this->file = $name; } function showFileTheme() { require_once('theme/theme-'.$this->file.'.php'); } function setData($name,$val) { $this->data[$name] = $val; } function getData($name,$def = NULL) { if (!empty($this->data[$name])) return $this->data[$name]; return ($def === NULL) ? NULL : $def; } } I później zamiast $zmienna = 5; $themeFunctions -> setData('zmienna',5); a w pliku dołączonym przez require: echo $this->getData('zmienna'); Oczywiście jeszcze fajniej będzie użyć metod magicznych __get, __set i __call. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kofel Opublikowano 12 Sierpnia 2010 Udostępnij Opublikowano 12 Sierpnia 2010 Proszę o pomoc :) Zasięg zmiennej Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Piczer Opublikowano 12 Sierpnia 2010 Udostępnij Opublikowano 12 Sierpnia 2010 Oczywiście jeszcze fajniej będzie użyć metod magicznych __get, __set i __call. Co w tym fajnego Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kofel Opublikowano 12 Sierpnia 2010 Udostępnij Opublikowano 12 Sierpnia 2010 To, że można się pochwalić^^ #down Thank you, cpt. Obvious :)) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 12 Sierpnia 2010 Administratorzy Udostępnij Opublikowano 12 Sierpnia 2010 Że zamiast getData i setData, mozna sobie ułatwić życie, jak chociażby $this->zmienna, czy $this->getZmienna(); ? Uważam, że fajniej, bo możesz sobie dostosować kilka kolejnych rzeczy w ten sposób. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Markuz Opublikowano 12 Sierpnia 2010 Autor Udostępnij Opublikowano 12 Sierpnia 2010 Gnysek błęda wywala : Fatal error: Can't use method return value in write context in D:\*****\theme\theme-login.php on line 1 plik theme-login.php : <?php if(!empty($this -> getData('info'))) { ?> <div class='bigpanel-panel'><div class='bigpanel-head'>Informacja</div><div class='bigpanel-body'> <?php echo $this -> getData('info') ?> </div></div> <?php } ?> <div class='bigpanel-panel'> <div class='bigpanel-head'>Logowanie</div> <div class='bigpanel-body'> <form action='login.php' method='POST'> <table> <tr><td>Login</td><td><input type='text' name='nazwa' /></td></tr> <tr><td>Hasło</td><td><input type='password' name='haslo' /></td></tr> <tr><td></td><td><input type='submit' name='ok' value='Zaloguj się' /></td></tr> </table> </form> </div> </div> Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 12 Sierpnia 2010 Administratorzy Udostępnij Opublikowano 12 Sierpnia 2010 A spróbuj <?php if($this -> getData('info') !== NULL) { ?> Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Markuz Opublikowano 12 Sierpnia 2010 Autor Udostępnij Opublikowano 12 Sierpnia 2010 Działa heh, dzięki :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się