从包含中获取变量


Get variable from include

我有四个文件:functions.php,lang.php,init.php和index.php。

函数.php

function loadLanguage()
{
    include_once("lang.php");
}

郎.php

$LANG = array(
    "SOMETEXT" => "This is a random text"
);

初始化.php

include_once("functions.php");
loadLanguage();

索引.php

include_once("init.php");
echo $LANG["SOMETEXT"];

我明白这个:

未定义的变量$LANG。

我在 init.php 中找到了一个解决方案:$LANG = loadLanguage(); ,但我不想使用它。还有别的办法吗?

因为你在函数中有这一行

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范围内的局部变量。

这是一个

黑客,但您可以在loadLanguage()内部声明$LANG global,然后完成您需要的操作。Ed Cottrell的回答描述了为什么你的方法行不通。

初始化.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"
}