似乎有些人讨厌全局变量,但是如果你能解释如何在没有它们的情况下进行编码,那我就全都听见了。
否则,我有几个选择,我很好奇哪个是最好的长期。考虑一下我有一个不会在持续时间内改变的变量。这是一个静态的全球性。我可以用:
$_SESSION['var'] = constantval;
define('var', constantval);
var = constantval;
和我真正好奇的那个:
function my_constants($which)
{
switch ($which) {
case 'var':
return 'constantval';
}
}
在最后一个中,目标是保持变量超出全局范围,以牺牲一些处理器成本来节省内存。节省的内存值得循环吗?各种其他类型的全球宣言之间是否存在值得注意的差异?
答案 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;
}
嗯,这是单身人士。在这种情况下,您不需要全局变量。