PHP include_once在函数内部具有全局效果

时间:2011-05-10 01:44:09

标签: php scope

我在php中有一个函数:

function importSomething(){
    include_once('something.php');
}

如何使include_once具有全局效应?导入的所有内容都将包含在全局范围内?

5 个答案:

答案 0 :(得分:6)

include()和朋友受范围限制。除非将调用移出函数的范围,否则无法更改包含内容所适用的范围。

我想解决方法是从函数返回文件名,然后调用它将结果传递给include_once() ...

function importSomething() {
    return 'something.php';
}

include_once(importSomething());

它看起来不太好,你一次只能返回一个(除非你返回一个文件名数组,循环遍历它并每次调用include_once()),但是范围确定是一个问题语言结构。

答案 1 :(得分:5)

您可以像这样返回文件中的所有变量......

function importSomething(){
   return include_once 'something.php';
}

只要something.php看起来像......

<?php

return array(
    'abc',
    'def'
);

您可以将其分配给全局变量......

$global = importSomething();

echo $global[0];

如果你想变得非常疯狂,你可以extract()所有这些数组成员进入范围(在你的情况下是全局的)。

答案 2 :(得分:4)

如果您希望将普通变量定义自动传送到全局范围,您还可以尝试:

function importSomething(){
    include_once('something.php');
    $GLOBALS += get_defined_vars();
}

但是,如果它只是一个配置数组,我也会选择更明确和可重用的return方法。

答案 3 :(得分:2)

我知道这个用户的答案真的很晚,但这是我的解决方案:

在您的函数内部,只需将您需要的任何变量声明为全局

示例:

需要将$ GLOBALS ['text']设置为“是”:

index.php的内容:

function setText()
{
    global $text;
    include("setup.php");
}

setText();
echo 'the value of $text is "'.$text.'"'; // output: the value of $text is "yes"

setup.php的内容:

$text = "yes";

解决方案类似于mario,但是,只有明确表示全局声明的vars会被覆盖。

答案 4 :(得分:0)

从包含文件引入的所有变量都会继承包含行的当前变量范围。虽然类和函数具有全局范围,但它取决于您的导入。

http://uk.php.net/manual/en/function.include.php (例子前的最后一段)