我在php中有一个函数:
function importSomething(){
include_once('something.php');
}
如何使include_once
具有全局效应?导入的所有内容都将包含在全局范围内?
答案 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)
从包含文件引入的所有变量都会继承包含行的当前变量范围。虽然类和函数具有全局范围,但它取决于您的导入。