我有一个看起来像这样的函数:
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 ?
答案 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');
,它开始工作。