2011-05-10 37 views
2

我有一个函数在PHP中:PHP include_once产生全球性的影响

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

我如何使它SOT该include_once有一个全球性的影响?导入的所有内容都将包含在全局范围内?

+1

*“一切重要”*比如说什么? – deceze 2011-05-10 01:46:31

+0

FML。假设要导入。 – Pwnna 2011-05-10 01:49:36

+7

请不要把你的生活视为理所当然。这只是一个错字。生活中有比这更糟糕的事情。例如,意外丢失文件。或者一个肢体。 – BoltClock 2011-05-10 01:50:56

回答

2

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

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

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

<?php 

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

,你可以分配到一个全局变量。 ..

$global = importSomething(); 

echo $global[0]; 

如果你想变得非常疯狂,你可以extract()所有th把数组成员放到范围中(在你的情况下是全局的)。

+0

我猜想隐藏在括号中的解决方案现在不会削减它。 – BoltClock 2011-05-10 02:05:31

+0

@BoltClock我没掏这一个从你的回答,但我没有投上一票:) – alex 2011-05-10 02:10:09

6

include()和朋友是范围限制的。除非将调用移出函数的作用域,否则不能更改包含的内容适用的作用域。

我想一个解决方法是从你的函数返回的文件名来代替,并把它传递其结果include_once() ...

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

include_once(importSomething()); 

它看起来并不漂亮,你只能返回一次一个(除非您返回一组文件名,循环访问并每次调用include_once()),但范围界定是该语言构造的一个问题。

+0

不能。我真正的功能,通过一对夫妇的目录做了环.. – Pwnna 2011-05-10 01:50:19

+1

有你的函数返回的路径的数组,或许。然后遍历所有这些。 – BoltClock 2011-05-10 01:55:22

3

如果你希望普通变量定义为自动远距传送到全球范围内,你也可以尝试:

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

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

2

我知道这个答案是真的迟到了该用户,但是这是我的解决方案:

自己的函数中,简单地宣布任何你需要ovewrite为全球的增值经销商的。

例子:

需要有$ GLOBALS [ '文本']设置为 “yes”:指数

内容。PHP:setup.php的

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

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

内容:

$text = "yes"; 

的解决方案是类似马里奥的,但是,只有明确地在全球宣布的增值经销商将被覆盖。

相关问题