![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 1 Dołączył: 29.04.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Próbuję napisać metodę, która wyświetli/podepnie mi zawartość pliku jak include(itd.) Fragment kodu:
Nie działa -> wyświetla białą stronę. Wyświetlanie błędów mam ustawione... Próbowałem też z return, ale dalej to samo :| Jak to rozwikłać? Z góry dzięki za pomoc ![]() Pozdrawiam |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 447 Pomógł: 191 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
a co w tym pliku się znajduje ?
-------------------- :)
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 1 Dołączył: 29.04.2010 Ostrzeżenie: (0%) ![]() ![]() |
Głównie zmienne. Echo tam nie występuje. Plik php. Jeszcze dodam, że zmienne z pliku chce obsługiwać też poza klasą.
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Poczytaj o zasięgu zmiennych. Nie działają ci dlatego że zmienne wewnątrz klasy/funkcji są ograniczone zasięgiem tylko do konkretnej klasy/funkcji i albo bawisz się w global (czyli cofasz się wstecz) albo inaczej projektujesz swoją aplikacje.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 1 Dołączył: 29.04.2010 Ostrzeżenie: (0%) ![]() ![]() |
Zrozumiałem, że nie da się inkludować plików poprzez klasy w właściwy sposób...
Ale się upewnię ![]() Czyli ten kod:
nie zadziała w ten sposób:
![]() Bo nie wiem co mam w klasie napisać...
Nie działa ![]() |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Nie rozumiesz, da się dołączyć plik (require/include) za pomocą klasy/funkcji, tyle że zmienne które masz w tym pliku, ograniczą się jedynie do tej funkcji/metody w klasie. Taki jest zasięg zmiennych.
Odnośnie return, return'em możesz zwrócić coś z funkcji, co może być przekazane dalej, ale wciąż musisz tego użyć w nieco inny sposób. Jeżeli wiesz jakie zmienne są w tym pliku, powiedzmy w wszystkich plikach konfiguracyjnych masz zmienną $config, wówczas możesz sobie wykonać to tak: Kod <?php class Foo { protected $filePath = '/sciezka/do/pliku/'; public function load($fileName) { $fileName = basename($fileName); if(is_readable($this->filePath.$fileName)) { include $this->filePath.$fileName; if(isset($config)) { return $config; } } } } $conf = new Foo(); $appConf = $conf->load('konfiguracja_applikacji.php'); var_dump($appConf); Tyle że to prawdę mówiąc jest sztuka dla sztuki, równie dobrze mógłbyś tylko raz użyć tego nieszczęsnego include gdzie ci potrzeba. Stwórz sobie jedną klasę, niech nawet ma metody statyczne, raz załaduj konfigurację i wrzuć w jakąś właściwość (zmienną obiektu) całą konfigurację i konkretną metodą pobieraj już gotową konfigurację. Przynajmniej tak to robię u siebie i póki co jest dość wygodnie. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 1 Dołączył: 29.04.2010 Ostrzeżenie: (0%) ![]() ![]() |
Ok rozumiem
![]() |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
No to wtedy już niestety leżysz. Jeszcze jedno przyszło mi do głowy jak wracałem do domu, możesz w pliku zrobić coś takiego:
includowany plik: Kod <?php $someVariable = array(1,2,3,4,5,6,7,8,9); return $someVariable; i twoja klasa ładująca dane zmienne: Kod <?php class Foo { protected $filePath = '/sciezka/do/pliku/'; public function load($fileName) { $fileName = basename($fileName); if(is_readable($this->filePath.$fileName)) { return include $this->filePath.$fileName; } else { //wyjątek, komunikat błędu, false, null - co wolisz, w tym przypadku zwrócę false, normalnie rzuciłbym wyjąkiem return false; } } } $conf = new Foo(); $appConf = $conf->load('konfiguracja_applikacji.php'); var_dump($appConf); W efekcie nie będziesz musiał wszystkich zmiennych mieć takich samych, ale będziesz musiał pamiętać żeby na końcu zwrócić tą zmienną, poprzez return. W podobny sposób chyba nawet działa konfiguracja w kohanie 3, nie jestem dokładnie pewien, ale widziałem tam właśnie pliki konfiguracyjne na końcu których był return i tak jakoś mi się skojarzyło ![]() |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 590 Pomógł: 107 Dołączył: 25.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
Ja też od niedawna zgłębiam tajniki obiektowego pisania w PHP. Wcześniej conieco pisałem bezobiektowo, ale stwierdziłem, że nawet na starość warto nauczyć się czegoś nowego. Miałem podobny problem, zresztą nawet opisałem go na forum: Temat: PHP obiekty nie widza zmiennych z inkludowanych plikow
Założeniem jest składnia pliku konfiguracyjnego (u mnie config.php) w postaci tablicy:
No i zgodnie z założeniami naskrobałem... "coś". Nie jest może estetyczne, niemniej... działa tak jak tego oczekuję: class.config.php:
A do samej klasy odwołuję się gdzie indziej w sposób:
Założeniem tego było, że modyfikacja pliku konfiguracyjnego jest dokonywane przez UPRAWNIONE osoby (są ustawione właściwe prawa w systemie) i aplikacja NIE ZAPISUJE nic do pliku konfiguracyjnego. Fachowców proszę o skomentowanie tej klasy, widać nie tylko ja miałem taki problem z inkludowaniem w obiektach... |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Kod $handle=fopen ($configfile, "r"); while (!feof ($handle)) { $line = fgets ($handle); if (preg_match ('/\s*\$(.*)\s+=\s+(.*)/', $line)) { $to_eval = preg_replace ('/\$/', '$this->', $line); eval ($to_eval); } } fclose ($handle); Niestety za ciekawie to nie wygląda, zarówno eval jak i parsowanie każdej linijki dwoma wyrażeniami.. Mój system konfiguracji wygląda znacznie prościej, jest znacznie szybszy, a użycie jest łatwiejsze, nie wspominając o możliwościach (odnoszenie się wewnątrz konfiguracji, do innej konfiguracji). Tyle że do tego potrzebne jest kilka rzeczy, osobiście używam yamla, bardzo mi się spodobał za pierwszym razem jak tylko go zobaczyłem i od tamtego czasu niczego więcej nie wyobrażam sobie używać do zapisywania konfiguracji ![]() Kod <?php Config::get('framework.default_database'); Config::get('framework.cache.driver'); A plik konfiguracji powiedzmy mniej więcej wygląda tak: Kod framework: default_locale: [pl_PL, pl, polish] default_timezon: Europe/Warsaw default_language: pl_PL default_database: %database.common% cache: driver: file lifetime: 3600 enabled: true database: common: driver: sqlite dbname: %path.apps%/data/common.db Czytelnie w zapisie, łatwe w użyciu ![]() Ten post edytował by_ikar 17.11.2011, 00:18:24 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 1 Dołączył: 29.04.2010 Ostrzeżenie: (0%) ![]() ![]() |
Ok, dzięki
![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.07.2025 - 09:57 |