涉及的功能范围包括在PHP中

时间:2011-06-21 19:23:59

标签: php function include scope

我在理解PHP中的包含和函数范围方面遇到了一些麻烦,并且一些谷歌搜索没有提供成功的结果。但问题出在这里:

这不起作用:

function include_a(){
    // Just imagine some complicated code
    if(isset($_SESSION['language'])){
        include 'left_side2.php';
    } else {
        include 'left_side.php';
    }
    // More complicated code to determine which file to include
}

function b() {
    include_a();
    print_r($lang); // Will say that $lang is undefined
}

基本上,$langleft_side.php中有一个名为left_side2.php的数组。我想在b()内访问它,但上面的代码设置会说$lang未定义。但是,当我在include_a()的开头复制并粘贴b()中的确切代码时,它会正常工作。但是你可以想象,我不希望在我需要的每个函数中复制和粘贴代码。

如何缓解此范围问题以及我做错了什么?

2 个答案:

答案 0 :(得分:2)

如果数组$langinclude_a()函数内定义,则它仅限于该函数,即使该函数在b()内调用。要访问$lang内的b(),您需要全局调用它。

这是因为include 'left_side2.php';函数中的include_a()。如果在包含内部定义了多个变量,并且您希望它们处于全局范围,那么您需要将它们定义为这样。

left_side.php内,将其定义为:

$GLOBALS['lang'] = whatever...;

然后在调用它们的函数中,试试这个:

function b() {
    include_a();
    print_r($GLOBALS['lang']); // Now $lang should be known.
}

答案 1 :(得分:1)

在你不需要的情况下使用全局变量被认为是“不好的做法”(不是我订阅的,而是普遍接受的)。更好的做法是通过在传递的变量前添加一个&符来传递引用,以便您可以编辑该值。

所以在left_side或left_side2里面你会得到:

b($lang);

和b将是:

function b(&$lang){...}

有关变量范围的进一步定义check this out