2010-06-28 4 views
7

I Hava funkcję, która wygląda mniej więcej tak:mam require („config.php”) z tablicami, ale nadal się niezdefiniowany błąd zmienna

require("config.php"); 

function displayGta() 
{ 
    (... lots of code...) 

    $car = $car_park[3]; 
} 

i config.php, które wyglądają mniej więcej tak :

<?php 
$car_park = array ("Mercedes 540 K.", "Chevrolet Coupe.", "Chrysler Imperial.", "Ford Model T.", "Hudson Super.", "Packard Sedan.", "Pontiac Landau.", "Duryea."); 
(...) 
?> 

Dlaczego mam Wskazówka: Undefined zmiennej: car_park?

Odpowiedz

14

spróbuj dodać

global $car_park; 

w swojej funkcji. Gdy podasz definicję $ car_park, tworzy ona zmienną globalną i aby uzyskać dostęp do niej z poziomu funkcji, musisz zadeklarować ją jako globalną lub uzyskać do niej dostęp przez superglobalne $ GLOBALS.

Aby uzyskać więcej informacji, zobacz numer manual page on variable scope.

+0

świetny.To naprawiło problem: D – ganjan

+0

Alternatywnie możesz 'require()' plik od wewnątrz samej funkcji. To również umieściłoby go we właściwym zakresie. Nie mogę powiedzieć, że bym to polecił, ale chodzi o to, że gdy dołączasz plik, jest on uruchamiany w zakresie, w którym znajduje się instrukcja include. –

10

Chociaż Paul opisuje, co się dzieje, spróbuję wyjaśnić to jeszcze raz.

Po utworzeniu zmiennej należy do określonego zakresu. Zakres to obszar, w którym można użyć zmiennej.

Na przykład, gdybym miał to zrobić

$some_var = 1; 

function some_fun() 
{ 
    echo $some_var; 
} 

zmienna nie jest dopuszczalne w ramach funkcji, ponieważ nie została stworzona wewnątrz funkcji. Na to, aby pracować wewnątrz funkcji należy użyć słowa kluczowego global więc poniższy przykład będzie działać

$some_var = 1; 

function some_fun() 
{ 
    global $some_var; //Call the variable into the function scope! 
    echo $some_var; 
} 

Jest odwrotnie, więc nie można wykonać następujące czynności

function init() 
{ 
    $some_var = true; 
} 

init(); 

if($some_var) // this is not defined. 
{ 

} 

Istnieje kilka sposobów dookoła tego, ale najprostszym ze wszystkich jest użycie tablicy $GLOBALS, która jest dozwolona w dowolnym miejscu skryptu, ponieważ są to zmienne specjalne.

Więc

$GLOBALS['config'] = array(
    'Some Car' => 22 
); 

function do_something() 
{ 
    echo $GLOBALS['config']['some Car']; //works 
} 

Upewnij się także, czy serwer ma register_globals wyłączony w Twojej INI dla bezpieczeństwa. http://www.php.net/manual/en/security.globals.php

1

Można spróbować pełnomocnika go do funkcji, takich jak:

funkcji foo ($ bar) {

(kod)

$ samochód = $ bar [3];

(kod)

}

Wtedy, kiedy nazywają go:

echo foo ($ bar);

Powiązane problemy