2010-06-28 22 views
7

Je Hava une fonction qui ressemble à ceci:un require (« config.php ») avec des tableaux, mais toujours obtenir erreur Undefined variable

require("config.php"); 

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

    $car = $car_park[3]; 
} 

et un config.php qui ont l'air quelque chose comme ça :

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

Pourquoi ai-je avis: Undefined variable: car_park?

Répondre

14

Essayez d'ajouter

global $car_park; 

dans votre fonction. Lorsque vous incluez la définition de $ car_park, il crée une variable globale, et pour y accéder depuis une fonction, vous devez la déclarer globale, ou y accéder via la superglobale $ GLOBALS.

Voir le manual page on variable scope pour plus d'informations.

+0

super.Cela a résolu le problème: D – ganjan

+0

Alternativement vous pourriez 'require()' le fichier depuis l'intérieur de la fonction elle-même. Cela aurait également mis dans la bonne portée. Je ne peux pas dire que je recommanderais de le faire, mais le fait est que lorsque vous incluez un fichier, il est exécuté dans la portée de l'instruction include. –

10

Même si Paul décrit ce qui se passe, je vais essayer d'expliquer à nouveau.

Lorsque vous créez une variable, elle appartient à une étendue particulière. Une portée est une zone dans laquelle une variable peut être utilisée.

Par exemple, si je devais faire

$some_var = 1; 

function some_fun() 
{ 
    echo $some_var; 
} 

la variable n'est pas autorisée dans la fonction, car il n'a pas été créé dans la fonction. Pour que cela fonctionne dans une fonction, vous devez utiliser le mot-clé global donc l'exemple ci-dessous travaillerait

$some_var = 1; 

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

C'est vice-versa de sorte que vous ne pouvez pas effectuer les opérations suivantes

function init() 
{ 
    $some_var = true; 
} 

init(); 

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

} 

Il y a quelques façons Autour de cela, mais le plus simple de tous utilise $GLOBALS tableau qui est autorisé n'importe où dans le script car ce sont des variables spéciales.

Alors

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

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

Assurez-vous également que votre serveur a register globals est désactivé dans votre INI pour la sécurité. http://www.php.net/manual/en/security.globals.php

1

Vous pouvez essayer de proxy dans votre fonction, comme:

fonction foo ($ bar) {

(code)

$ voiture = $ bar [3];

(code)

}

Puis, quand vous l'appelez:

echo foo ($ bar);