Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Utrata zmiennych przy dołączaniu pliku
Mephis
post
Post #1





Grupa: Zarejestrowani
Postów: 94
Pomógł: 1
Dołączył: 16.12.2012

Ostrzeżenie: (0%)
-----


Witam.

Słowem wstępu. Piszę pewną aplikację. Struktura wygląda mniej więcej tak...
Cytat
skrypty/strona_podstrona1.php
szablony/strona_podstrona1.tpl
jezyk/strona_podstrona1.lang
strona.php


Plik strona.php nie zawiera samej treści - to plik zawierający dane dot. reszty podstron, ustawień, generuje linki do podstron. Aktualnie wyświetlana podstrona to 3 dołączone do strona.php pliki (z kodem, szablonem i tłumaczeniem). Wiem, że mógłbym umieścić to w pliku strona.php i odczytywać tylko zmienną z adresu i na jej podstawie wyświetlać odpowiednią treść, jednak każda z podstron jednej strony pełni inną funkcję, zawiera całkowicie inny kod i inaczej wygląda, tak więc lepiej, gdyby te pliki były oddzielone. Odczytana z adresu zmienna trafia do require_once(strona_+$zmienna) i potem wszystko się ładnie wyświetla.

Jeśli dołączam pliki na czysto w strona.php, wszystko działa normalnie. Napisałem funkcję, która dołączy plik. Okrojona do kluczowego elementu wygląda tak:
  1. function require_page($dir) {
  2. return require_once($dir);
  3. }


I w tym momencie zmienne się gubią. Jeśli w pliku ze skryptem "strona_podstrona1.php" wpisze:
  1. echo 'cośtam';
  2. $zmienna = 'blabla';

I wyświetlę ją w szablonie, widoczne będzie tylko 'cośtam'. $zmienna znika.

Czy ktoś orientuje się w czym tkwi problem?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
Porter3
post
Post #2





Grupa: Zarejestrowani
Postów: 15
Pomógł: 3
Dołączył: 18.11.2010

Ostrzeżenie: (0%)
-----


Problemem tutaj nie jest zasięg zmiennych?
http://php.net/manual/en/language.variables.scope.php
Go to the top of the page
+Quote Post
Pyton_000
post
Post #3





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


wywal return
poza tym zmienne są wew. funkcji a zatem nie są widoczne poza nią.

Ten post edytował Pyton_000 31.10.2014, 21:31:27
Go to the top of the page
+Quote Post
Mephis
post
Post #4





Grupa: Zarejestrowani
Postów: 94
Pomógł: 1
Dołączył: 16.12.2012

Ostrzeżenie: (0%)
-----


Hmmm... Czyli musiałbym zadeklarować wcześniej wszystkie zmienne jako globalne? Nie można tego zrobić w inny sposób?

Przykładowo: chciałbym napisać funkcję, która sprawdziłaby mi czy plik istnieje, jeśli tak to aby został dołączony, a w innym wypadku funkcja zwróciłaby komunikat o tym, jakiego pliku brakuje... Czy coś w tym stylu. Nie da się tego zrobić w prosty sposób?
Go to the top of the page
+Quote Post
Turson
post
Post #5





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


PO czym wnioskujesz, że $zmienna jest utracona?
Jeżeli masz w pliku
$zmienna = 1;
includujesz ten plik
i sprawdzisz tam var_dump($zmienna); to puste?
Go to the top of the page
+Quote Post
Mephis
post
Post #6





Grupa: Zarejestrowani
Postów: 94
Pomógł: 1
Dołączył: 16.12.2012

Ostrzeżenie: (0%)
-----


Tak, jeśli użyję własnej funkcji dołączającej plik - var_dump nic nie wyświetla.

Ba, jeśli korzystam z własnej funkcji var_dump (która w razie braku danych do wyświetlenia wyrzuca o tym komunikat), to nie dostaję tejże informacji zwrotnej.

Jeśli zwyczajnie dołączam plik poprzez czyste require/include to wszystko działa należycie.
Go to the top of the page
+Quote Post
Pyton_000
post
Post #7





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Przecież dostałeś już kilka postów odpowiedzi że masz poczytać o zasięgu zmiennych bo to z tym masz problem. Dalej nie rozumiesz?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 2.10.2025 - 17:50