我有四个文件:functions.php,lang.php,init.php和index.php。
的functions.php
function loadLanguage()
{
include_once("lang.php");
}
lang.php
$LANG = array(
"SOMETEXT" => "This is a random text"
);
的init.php
include_once("functions.php");
loadLanguage();
的index.php
include_once("init.php");
echo $LANG["SOMETEXT"];
我明白了:
未定义的变量$ LANG。
我在init.php中找到了一个解决方案:$LANG = loadLanguage();
,但我不想使用它。还有另一种方式吗?
答案 0 :(得分:2)
因为你在函数中有这一行
include_once("lang.php");
lang.php
中定义的变量仅在函数loadLanguage
中定义。当您尝试稍后将这些变量作为全局变量访问时,它们是未定义的。如果你需要它们是全球化的,那就让它们变得全球化;否则,你必须从函数中返回它们或以其他方式传递它们。
换句话说,您的代码与此相同:
// include_once("init.php");
// does this:
// include_once("functions.php");
// does this:
function loadLanguage()
{
// include_once("lang.php");
// does this:
$LANG = array(
"SOMETEXT" => "This is a random text"
);
}
loadLanguage();
echo $LANG["SOMETEXT"];
删除所有包含内容,你会得到:
function loadLanguage()
{
$LANG = array(
"SOMETEXT" => "This is a random text"
);
}
loadLanguage();
echo $LANG["SOMETEXT"];
这使得$LANG
实际上是loadLanguage
范围内的局部变量变得容易。
答案 1 :(得分:0)
这是一个黑客攻击,但您可以在$LANG
内将global
声明为loadLanguage()
,然后完成您需要的操作。 Ed Cottrell的回答描述了为什么你的方法不起作用。
<强>的init.php 强>
<?php
function loadLanguage()
{
global $LANG;
include_once("lang.php");
}
var_dump($LANG);
loadLanguage();
var_dump($LANG);
<强>输出强>
~$ php init.php
PHP Notice: Undefined variable: LANG in /Users/Josh/init.php on line 9
NULL
array(1) {
["s"]=>
string(6) "string"
}