2010-06-21 69 views
0

我有一个php文件,其中包含另一个使用include() 我在包含的文件中定义了一个变量$something,并且这将根据在包含文件中运行的函数进行更改。从包含的文件中检索变量

现在,我想在原始文件中打印那个变量,当我使用echo $something它绝对没有打印什么,帮忙吗?

回答

9

我们只是暂时搁置,这是片刻:)

你可能运行到一个问题,即你没有声明的变量一个贫穷的设计选择作为修改它的函数的全局。

function foo() 
{ 
    global $something; 
    $something='bar'; 
} 

你会在这方面找到最有教育意义的PHP手册页!

那么,为什么这是一个糟糕的设计选择?首先,请查看"Are global variables bad?",它回答了C++的问题。 PHP的答案实际上没有什么不同 - 它可能会导致无法维护且无法读取的代码。

PHP还有另外一个(越来越历史的)皱纹 - 如果'register_globals'设置打开,用户可以通过URL查询字符串设置全局变量。这可能会导致各种安全问题,这就是为什么现在默认情况下会关闭此功能(绝不会写入需要启用的新代码)。

作为一个智者曾经说过,“全局的路径黑暗的一面。全局导致的愤怒。愤怒导致恨。恨导致患” :)

+0

+1,正是我在想什么。 – 2010-06-21 20:11:01

+0

希望OP会跟进一个新问题,“为什么这是一个糟糕的设计选择”。 – Zak 2010-06-21 20:12:58

+0

为什么这是一个糟糕的设计选择? (不是在一个新的问题,但我想获得的信息,如果你不介意:)) – user220755 2010-06-21 20:20:14

1

很可能您已声明你的变量在全局范围内,并试图在功能范围内使用它。要解决这个问题,请使用global命令。

$myglobal = 3; 

function printMyGlobal() { 
    global $myglobal; // will not work without this line 
    echo $myglobal; 
}