2010-06-28 12 views
7

ho hava una funzione che sembra qualcosa di simile:ho un richiedo ("config.php") con gli array, ma ancora ottengo l'errore Variabile non definita

require("config.php"); 

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

    $car = $car_park[3]; 
} 

e config.php che sembrano qualcosa di simile :

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

Perché ottengo Avviso: variabile non definita: car_park?

risposta

14

Prova ad aggiungere

global $car_park; 

nella funzione. Quando includi la definizione di $ car_park, sta creando una variabile globale e per accedervi dall'interno di una funzione devi dichiararla come globale o accedervi tramite il superglobale $ GLOBALS.

Vedere manual page on variable scope per ulteriori informazioni.

+0

ottimo.Ciò risolve il problema: D – ganjan

+0

In alternativa puoi 'require()' il file dall'interno della funzione stessa. Anche questo lo avrebbe messo nella portata corretta. Non posso dire che in realtà lo raccomando, ma il punto è: quando includi un file, viene eseguito nel campo di applicazione dell'istruzione di inclusione. –

10

Anche se Paolo descrive cosa sta succedendo, proverò a spiegare di nuovo.

Quando si crea una variabile appartiene a un particolare ambito. Un ambito è un'area in cui è possibile utilizzare una variabile.

Ad esempio se ero farlo

$some_var = 1; 

function some_fun() 
{ 
    echo $some_var; 
} 

la variabile non è consentita all'interno della funzione perché non è stato creato all'interno della funzione. Per farlo funzionare all'interno di una funzione è necessario utilizzare la parola chiave globale in modo l'esempio di seguito funzionerebbe

$some_var = 1; 

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

Questo è viceversa quindi non è possibile effettuare le seguenti operazioni

function init() 
{ 
    $some_var = true; 
} 

init(); 

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

} 

Ci sono alcuni modi intorno a questo, ma il più semplice di tutti sta usando l'array $GLOBALS che è consentito ovunque all'interno dello script in quanto sono variabili speciali.

Così

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

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

anche assicurarsi che il server ha Registra globali spente nella vostra INI per la sicurezza. http://www.php.net/manual/en/security.globals.php

1

Si potrebbe provare a delega nella tua funzione, come:

funzione foo ($ bar) {

(codice)

$ auto = $ bar [3];

(codice)

}

Poi, quando si chiama:

echo foo ($ bar);