我有一组静态类方法。我还有一个存储在对象变量$ DB中的脚本中的现有数据库连接。我如何调用这些静态类方法,并让它们使用该$ DB对象,而不必每次都将这个变量作为类方法的参数传递给它们?PHP:如何将现有的数据库连接传递给静态类方法?
例如,现在我不得不使用一个全球性的,不幸的是:
class Foo {
public static function Bar() {
global $DB;
return $DB->DSN_STRING;
}
}
这就像我需要我的静态类调用自身与常规莫明得到$ DB连接,而无需重新建立它。注意我不能将它注入静态类,因为它没有实例化。
当然,如果我从静态类切换到常规类并实例化$ Foo对象,问题就解决了。然后,我可以将$ DB var作为公共变量的设置注入。或者添加一个公共方法来接收$ DB var,然后设置$ Foo对象的私有变量。或者,让类构造函数接受$ DB var并设置$ Foo对象的私有变量。但所有3种技术都要求我从静态类切换到普通类。
有人提到了一种叫做Registry模式或Singleton模式的东西(我认为它是同样的东西?不确定)。这是我需要有效解决这个问题吗?
最重要的是我避免调用“全球$ DB”,因为人们对此非常不满。
这是*完全*我需要的,我没有意识到一个静态类可以维持它内部的对象持久性。 – Volomike 2009-12-08 03:51:40
单身人士的美好时光。 :) 很高兴有帮助。 – zombat 2009-12-08 05:28:40