【问题标题】:PHP global var for everything? [duplicate]一切的PHP全局变量? [复制]
【发布时间】:2012-12-24 10:11:05
【问题描述】:

可能重复:
Registry design pattern…good or bad?

我正在编写一个使用 PHP 的游戏脚本,并以与我构建许多网站的方式类似的方式来处理它。我有一个习惯,即声明一个变量,它是一个 stdClass,它包含许多其他对执行很重要的变量。然后,如果我需要函数内部的某些东西(如果它没有传入参数),我只需使用全局 $variable,在本例中为 $ar。

$ar = new stdClass;
$ar->i = new stdClass;
$ar->s = new stdClass;

$ar->i->root = "/home/user";

/* Directory where log files are to be stored. */
$ar->i->logs = "{$ar->i->root}/logs";

/* Directory where the banlist is. */
$ar->i->bl = "{$ar->i->root}/customize/settings/bannedaccounts.txt";

/* Directory where the silencelist is. */
$ar->i->sl = "{$ar->i->root}/customize/settings/silencedaccounts.txt";

/* How many points should be awarded for 1st place, 2nd place... etc. */
$ar->s->points = array(10, 7, 5, 4, 3, 2, 1, 1, 1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1);

因此,如果我要在函数中使用上述变量之一,我会这样处理它。

public function run() {
  global $ar;
  //do something with the variable..
}

有人会建议不要这样做吗?使用单个变量并将其包含在许多函数中是一种避免的坏习惯吗?我知道创建只使用给定参数的函数是可取的,但我问的是关于 PHP 性能而不是编程清晰度的问题。谢谢!

【问题讨论】:

标签: php performance global-variables scope global


【解决方案1】:

聚集在一起表示一个对象的数据元素应该是一个对象。如果你有不相关的东西,不要把它放在同一个对象中。

如果您需要全局范围(通常不需要),您可以使用$GLOBALS。但是,对于大多数项目,我建议您遵循 OOP 原则。至少使用函数参数。

如果您有一个像 run() 这样需要这些变量的函数库(或者,甚至只是 run()!),请拥有一个实用程序类,其中这些变量是该类的成员。

【讨论】:

  • 好吧,我通常做的是将我的引擎(几乎就像库)存储在全局变量中,所以我使用例如 $ar->e->db = new Database(); 但是里面的所有内容都将成为 @987654325 的变量@。我喜欢这样工作,但我不确定这是否是一种不好的做法。
  • 没有必要这样做。如果您想要一个真正的全局数据库连接(在某些情况下可能有意义),请使用$GLOBALS
猜你喜欢
  • 1970-01-01
  • 2013-01-06
  • 2010-11-23
  • 2011-04-06
  • 1970-01-01
  • 2017-04-22
  • 2019-06-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多