我有一个config.php
包含在每个页面中的内容。在配置中,我创建了一个看起来像这样的数组:
$config = array();
$config['site_name'] = 'Site Name';
$config['base_path'] = '/home/docs/public_html/';
$config['libraries_path'] = $config['base_path'] . '/libraries';
//etc...
然后我有function.php
,几乎每个页面都包含它,我必须使用global $config
它来访问它 -这就是我想要摆脱的!
如何$config
在不使用的情况下访问我的代码的其他部分global
?
谁能解释一下,为什么我不应该global
在我的例子中使用?有人说它的语气不好,有人说它不安全?
编辑1:
我在哪里以及如何使用它的示例:
function conversion($Exec, $Param = array(), $Log = '') {
global $config;
$cmd = $config['phppath'] . ' ' . $config['base_path'] . '/' . $Exec;
foreach ($Param as $s)
{
$cmd .= ' ' . $s;
}
}
编辑2:
按照Vilx的建议,将所有这些都放在课堂上会很酷,但在这种情况下,我将如何将它与以下从数据库中提取配置的循环联系key
起来value
。
我过度简化了分配$config
数组的想法,这里是一个例子:
$sql = "SELECT * from settings";
$rsc = $db->Execute($sql);
if ( $rsc ) {
while(!$rsc->EOF) {
$field = $rsc->fields['setting_options'];
$config[$field] = $rsc->fields['setting_values'];
@$rsc->MoveNext();
}
}
编辑 3:
此外,我必须从 config 中设置的函数访问其他vars
函数,并且它们很少,例如:$db
等$language
。
如果我把它们放在课堂上,它真的能解决任何问题吗?如果我使用global
它真正改变了什么?
编辑4:
我在函数中阅读了 PHP 全局,戈登以非常好的方式解释了为什么你不应该使用global
. 我同意一切,但在我的情况下我不使用global
重新分配变量,这将导致,就像他说的那样<-- WTF!!
,;)) 是的,同意,这太疯狂了。但是,如果我只需要通过使用global $db
这种情况下的问题来从函数访问数据库?否则,您如何在不使用的情况下执行此操作global
?
编辑 5:
在同一个 PHP global in functions deceze说:“反对 global 的一个重要原因是它意味着该函数依赖于另一个范围。这将很快变得混乱。”
但我在这里谈论的是基本的'INIT'。我基本上设置define
但使用vars
- 这在技术上是错误的。但是您的功能不依赖于任何东西 - 而是$db
您可以记住的一个 var 的名称?这真的是全球需要使用$db
的,这里的依赖关系在哪里以及如何使用它?
PS我只是有一个想法,我们在这里面临两种不同思想的冲突,例如:我的(但不太了解面向对象的编程)和那些在OOP中可以被称为大师的人(从我目前的角度来看) - 对我来说看起来很明显的事情会引发新的问题。我想这就是为什么这个问题被一遍又一遍地问到的原因。就我个人而言,它毕竟变得更加清晰,但仍有一些事情需要澄清。