为了账号安全,请及时绑定邮箱和手机立即绑定

停止在PHP中使用“global”

停止在PHP中使用“global”

PHP
缥缈止盈 2019-06-24 09:25:49
停止在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:把所有这些都放到课堂上,就像维尔克斯,但在本例中,我将如何将其与正在提取配置的下面的循环绑定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:另外,我还得去找其他人vars来自在config中设置的函数,并且它们很少,例如:$db, $language等等。如果我把它们放到课堂上,它真的能解决任何问题吗?如果我用global它真正改变了什么?编辑4:我读PHP全局函数哪里高登用一种很好的方式解释了为什么你不应该用global..我同意每件事,但我不使用global在我的例子中,重新分配变量,这会导致,就像他说的,<-- WTF!!是的,同意,这太疯狂了。但是,如果我只需要从一个函数访问数据库,只需使用global $db这个案子的问题在哪里?您如何做到这一点,否则,不使用global?编辑5:在相同的PHP全局函数中欺骗说:“反对全球的一个主要原因是,这意味着该功能依赖于另一个范围。这将很快变得混乱。”但我说的是基本的“INIT”。我基本上define但使用vars-这在技术上是错误的。但是您的函数不依赖于任何东西-而是一个var的名称。$db你能记住吗?它确实是全球需要使用的$db,这里的依赖项在哪里,否则如何使用它?P.S.我刚想到,我们正面临着两种不同思想的冲突,例如:水雷(但不太了解面向对象的编程)和那些在OOP中可以被称为大师(从我目前的观点来看)的人-对他们来说显而易见的事情-出现了新的问题。我想这就是为什么这个问题被一遍又一遍地问下去的原因。就我个人而言,它毕竟变得更清楚了,但仍然有一些事情需要澄清。
查看完整描述

3 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

我用一门课解决了这个问题:

class Config{
    public static $SiteName = 'My Cool Site';}function SomeFunction{
    echo 'Welcome to ' , Config::$SiteName;}

Fcortes关于使用常量的建议也是一个很好的建议。我只想建议给所有常量一个前缀,比如CFG_SITE_NAME,因此,为了避免名称与其他常量发生意外冲突。


查看完整回答
反对 回复 2019-06-24
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

对于您的情况,我将创建一个唯一的文件constants.php带着定义(如果您的目的是这些“变量”在执行时间内永远不会更改):

define('SITE_NAME','site name');define('BASE_PATH','/home/docs/public_html/');...

包括这个constants.php在您需要它的所有文件中:

include_once('constants.php');


查看完整回答
反对 回复 2019-06-24
  • 3 回答
  • 0 关注
  • 641 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信