在PHP中处理全局变量的最有效方法是什么?

时间:2014-01-09 11:03:10

标签: php globals

似乎有些人讨厌全局变量,但是如果你能解释如何在没有它们的情况下进行编码,那我就全都听见了。

否则,我有几个选择,我很好奇哪个是最好的长期。考虑一下我有一个不会在持续时间内改变的变量。这是一个静态的全球性。我可以用:

$_SESSION['var'] = constantval;
define('var', constantval);
var = constantval;

和我真正好奇的那个:

function my_constants($which)
{
    switch ($which) {
        case 'var':
            return 'constantval';
    }
}

在最后一个中,目标是保持变量超出全局范围,以牺牲一些处理器成本来节省内存。节省的内存值得循环吗?各种其他类型的全球宣言之间是否存在值得注意的差异?

2 个答案:

答案 0 :(得分:3)

由于内存使用或处理器成本,全局变量不被视为不良做法。这是因为允许程序的任何部分修改它们的问题可能会导致。随着时间的推移,很难理解程序的哪些部分读取或写入全局变量。

答案 1 :(得分:0)

全局变量(singetons)的替代品。 它将为您提供精细的访问控制: E.g:

 class ConfigParamSingelton {
     private var $value;
     private static $mInstance = null;

     public function getValue() { 
         return $this->value;
     }

     public function getInstance() {
         if(self::$mInstance == null) {
            self::$mInstance = new ConfigParamSingelton();
         }
         return self::$mInstance;
     }

现在你可以:

     protected function setValue($val) { // is immuteable by clients of the object
          $this->value = $val;
     }

     public function setValue($val) {// is muteable
          $this->value = $val;
     }

嗯,这是单身人士。在这种情况下,您不需要全局变量。