Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Utrata zmiennych przy dołączaniu pliku
Forum PHP.pl > Forum > PHP
Mephis
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?
Porter3
Problemem tutaj nie jest zasięg zmiennych?
http://php.net/manual/en/language.variables.scope.php
Pyton_000
wywal return
poza tym zmienne są wew. funkcji a zatem nie są widoczne poza nią.
Mephis
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?
Turson
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?
Mephis
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.
Pyton_000
Przecież dostałeś już kilka postów odpowiedzi że masz poczytać o zasięgu zmiennych bo to z tym masz problem. Dalej nie rozumiesz?
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.