从include中获取变量

时间:2015-10-29 16:49:36

标签: php scope

我有四个文件: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();,但我不想使用它。还有另一种方式吗?

2 个答案:

答案 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"
}