10

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

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."); 
 (...)
?>

为什么我会收到Notice: Undefined variable: car_park

4

4 回答 4

19

尝试添加

 global $car_park;

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

有关更多信息,请参阅有关变量范围的手册页

于 2010-06-28T21:49:07.263 回答
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

于 2010-06-28T21:57:48.627 回答
1

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

函数 foo($bar){

(代码)

$汽车 = $酒吧[3];

(代码)

}

然后当你调用它时:

回声 foo($bar);

于 2010-06-28T22:58:54.467 回答
0

我遇到了同样的问题并且一直在扯头发 - 没有任何效果,绝对没有 - 直到绝望中我只是将内容复制config.php到一个新文件中并将其保存为config2.php(根本不更改其内容),更改require_once('config.php');to并且require_once('config2.php');它刚刚开始工作。

于 2019-12-03T18:17:49.173 回答