2010-06-28 62 views
7

我哈瓦,看起来像这样的功能:我有一个要求(“config.php中”)的阵列,但还是得到了一个未定义变量错误

require("config.php"); 

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

    $car = $car_park[3]; 
} 

,看起来像这样和config.php文件:

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

为什么我得到注意:未定义的变量:car_park

回答

14

尝试在功能附加

global $car_park; 

。当您包含$ car_park的定义时,它将创建一个全局变量,并且要从函数内部访问该变量,必须将其声明为全局变量,或者通过$ GLOBALS超全局来访问它。

查看manual page on variable scope了解更多信息。

+0

很好。解决了这个问题:D – ganjan 2010-06-28 22:04:39

+0

或者你可以从函数本身的内部'require()'文件。这也将它放在正确的范围内。我不能说我真的推荐这么做,但重点是:当你包含一个文件时,它会在include语句所在的范围内运行。 – 2010-06-29 02:14:47

10

尽管保罗描述了发生了什么,我会再试一次。

当您创建一个变量时,它属于一个特定的范围。范围是可以使用变量的区域。

举例来说,如果我是这样做

$some_var = 1; 

function some_fun() 
{ 
    echo $some_var; 
} 

变量没有在函数内允许的,因为它没有在函数内部产生。对于它的函数内部工作,你必须使用global关键字所以下面的例子将工作

$some_var = 1; 

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

这是反之亦然,所以你不能做以下

function init() 
{ 
    $some_var = true; 
} 

init(); 

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

} 

有几种方法但最简单的一个是使用$GLOBALS数组,它在脚本中的任何位置都是允许的,因为它们是特殊变量。

所以

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

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

另外,还要确保你的服务器有注册全局在您的INI关闭了安全性。 http://www.php.net/manual/en/security.globals.php

1

你可以尝试代理到你的功能,如:

函数foo($条){

(代码)

$车= $条[3];

(代码)

}

然后当你怎么称呼它:

回声FOO($条);