2012-11-09 7 views
12

Powiel możliwe:
Undefined variable problem with PHP functionniezdefiniowana zmienna błąd w PHP include file

Czy ktoś może mi powiedzieć, dlaczego wciąż otrzymuję niezdefiniowanych komunikatów o błędach w moim zmienna PHP zawierać pliki?

<?php 

$page = 1; 

if (isset($_REQUEST['page'])) { 
    $page = $_REQUEST['page']; 
} 

function phpRocks() { 
    require("includes/dostuff.php"); 
} 

if ($search) { 
    phpRocks(); 
} 

?> 

Następnie w dostuff.php:

<?php echo $page; ?> 

Jest to błąd Dostaję:


Wskazówka: zmienna Undefined: strona w /dostuff.php na linii

Zaakcentowani wyborcy/bliscy wnioskodawcy: nie wykazuje żadnych wysiłków badawczych? Jak to? Co jeszcze powinienem dodać? Przez pół godziny zastanawiałem się nad tym i nie mogę znaleźć żadnych innych postów, które odpowiedziałyby na to pytanie. Czy muszę być ekspertem PHP w celu zadawania pytań (w związku z tym nie zamieszczałbym żadnych pytań!)?

+2

Zmienny zakres. Deklarujesz w zasięgu globalnym, ale otwierasz szablon z funkcji o własnym lokalnym zasięgu var. – mario

+0

czy jesteś pewien, że '$ page' się ustawia? – sgroves

+1

Gdzie jest wywoływane 'phpRocks()'? –

Odpowiedz

9

Mario to ma. Zrób to:

function phpRocks() { 
    global $page; 

    require("includes/dostuff.php"); 
} 
+2

To było właśnie to, czego potrzebowałem. Dzięki! – Zoolander

+0

Przeczytaj w Zoolandzie, to twój problem tutaj. – zomboble

2

dodać globalnej var w was działać tak

function phpRocks() { 
    global $page; 
    require("includes/dostuff.php"); 
} 
7

Dołączasz plik do funkcji. Dlatego zakres całego dołączonego kodu jest zakresem funkcji. Zmienna $page nie istnieje w funkcji. Przekazać go w:

function phpRocks($page) { 
    require "includes/dostuff.php"; 
} 

phpRocks($page); 
+5

Dlaczego jestem jedynym, który tu ukorzenił się zamiast iniekcji 'global' spaghetti? – deceze

+1

Wszyscy inni umieszczają komentarz Mario w formularzu odpowiedzi, aby uzyskać łatwą reputację. Jesteś jedynym, który dodał coś istotnego. –

+0

Nie jestem pewien, czy to najlepsze rozwiązanie. '$ page' _should_ może być tutaj zmienną globalną IMO ... jest to zmienna utworzona w zasięgu globalnym, której musi używać dołączony plik. Wywołanie funkcji nie ma z tym nic wspólnego. Poza tym może on chcieć przekazać "prawdziwe" argumenty do funkcji w przyszłości, które będą używane poza 'dostuff.php'. Pozwala to uniknąć nieporozumień między tymi dwoma. – sgroves

1

Musisz zadeklarować zmienną globalną tak:

function phpRocks() { 
global $page;   //set variable to global 
require("includes/dostuff.php"); 
}