我有一个带有数组的require(“config.php”),但仍然得到Undefined变量错误

时间:2010-06-28 21:48:07

标签: php configuration variables global-variables require

我有一个看起来像这样的函数:

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

4 个答案:

答案 0 :(得分:14)

尝试添加

 global $car_park;

在你的功能中。当你包含$ car_park的定义时,它正在创建一个全局变量,并且要从函数中访问它,你必须将它声明为全局变量,或者通过$ GLOBALS超全局访问它。

有关详细信息,请参阅manual page on variable scope

答案 1 :(得分: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

答案 2 :(得分:1)

您可以尝试将其代理到您的功能中,例如:

function foo($ bar){

(代码)

$ car = $ bar [3];

(代码)

}

然后当你打电话时:

echo foo($ bar);

答案 3 :(得分:0)

我遇到了同样的问题,一直在扯头发-没用,绝对没用-直到无奈之下,我只是将config.php的内容复制到了一个新文件中并保存为{{1} }(根本不更改其内容中的任何内容),将config2.php更改为require_once('config.php');,它开始工作。