停止在PHP中使用“global”

停止在PHP中使用“global”

我有一个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:

把所有这些都放到课堂上,就像维尔克斯,但在本例中,我将如何将其与正在提取配置的下面的循环绑定keyvalue从数据库。
我把分配的想法简单化了$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:

另外,我还得去找其他人vars来自在config中设置的函数,并且它们很少,例如:$db$language等等。

如果我把它们放到课堂上,它真的能解决任何问题吗?如果我用global它真正改变了什么?

编辑4:

我读PHP全局函数哪里高登用一种很好的方式解释了为什么你不应该用global..我同意每件事,但我不使用global在我的例子中,重新分配变量,这会导致,就像他说的,<-- WTF!!是的,同意,这太疯狂了。但是,如果我只需要从一个函数访问数据库,只需使用global $db这个案子的问题在哪里?您如何做到这一点,否则,不使用global?

编辑5:

在相同的PHP全局函数中欺骗说:“反对全球的一个主要原因是,这意味着该功能依赖于另一个范围。这将很快变得混乱。”

但我说的是基本的“INIT”。我基本上define但使用vars-这在技术上是错误的。但是您的函数不依赖于任何东西-而是一个var的名称。$db你能记住吗?它确实是全球需要使用的$db,这里的依赖项在哪里,否则如何使用它?

P.S.我刚想到,我们正面临着两种不同思想的冲突,例如:水雷(但不太了解面向对象的编程)和那些在OOP中可以被称为大师(从我目前的观点来看)的人-对他们来说显而易见的事情-出现了新的问题。我想这就是为什么这个问题被一遍又一遍地问下去的原因。就我个人而言,它毕竟变得更清楚了,但仍然有一些事情需要澄清。


缥缈止盈
浏览 642回答 3
3回答

犯罪嫌疑人X

我用一门课解决了这个问题:class&nbsp;Config{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;$SiteName&nbsp;=&nbsp;'My&nbsp;Cool&nbsp;Site';}function&nbsp;SomeFunction{ &nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;'Welcome&nbsp;to&nbsp;'&nbsp;,&nbsp;Config::$SiteName;}Fcortes关于使用常量的建议也是一个很好的建议。我只想建议给所有常量一个前缀,比如CFG_SITE_NAME,因此,为了避免名称与其他常量发生意外冲突。

有只小跳蛙

对于您的情况,我将创建一个唯一的文件constants.php带着定义(如果您的目的是这些“变量”在执行时间内永远不会更改):define('SITE_NAME','site&nbsp;name');define('BASE_PATH','/home/docs/public_html/');...包括这个constants.php在您需要它的所有文件中:include_once('constants.php');
打开App,查看更多内容
随时随地看视频慕课网APP