2012-07-16 85 views
3

我正在寻找关于以下方面的一些反馈:PDO对象跨越类

我目前有两个类,它们正在我的PHP应用程序中使用。

数据库连接类,它目前使用MySQL(但切换到PDO)。

需要数据库功能的另一个类(有几个函数)。

我正在寻找设计这个的最佳方法,我已经阅读了关于singletons(非常混合的评论),阅读对于每个方法(类函数)简单地声明为对象new的示例,以及示例连接被分配给一个私有变量,作为每个类的__constructor方法的一部分(然后用$this->引用)。

那么,其他人怎么做呢?我希望你们能够举一些例子,并且也欢迎别人看过的内容。

我有两个单独的类,在两个单独的文件。我想保留干净的代码,减少DB上不必要的开销,并避免任何可能被认为过时的事情(比如全局变量)。

回答

2

负责连接的Database类应为是连接到数据库,创建新的PDO实例并将其保存到本身的字段

class Database { 
    private $pdo; 
    public __construct() { 
     $this->pdo = new PDO(...); 
    } 
} 

第二类,不关心在DB连接是,它只是需要它的工作Database注入:

class WorkerClass { 
    private $db; 
    public __construct(Database $db) { 
     $this->db = $db; 
    } 
} 
+1

这就是我在我的gitHub MVC中开始做的事情:-) @ircmaxell会很自豪:-) – Neal 2012-07-16 16:06:27

+0

感谢您的回复,这看起来像一个不错的选择。我会诚实地说,我对__construct神奇的方法很陌生,因此我并不是100%通过Database类和$ db变量做的事情 - 请问您想解释一下吗? – 2012-07-16 16:17:14

+0

当然,为了在你的WorkerClass对象中使用'Database'对象,你需要与它共享那个对象。当您第一次实例化对象时,__construct方法将运行。所以你的代码看起来像这样:'$ db = new Database(); $ worker = new WorkerClass($ db);'。现在Database对象保存在'WorkerClass'中,所以你可以像'$ this-> db'那样访问它。 – 2012-07-16 16:21:08

1

我一直在__constructor中创建它,然后使用$this->来实现它。这应该适合你的需求,但我鼓励你玩弄不同的风格,并看看最好的工作。

我不会每次都创建一个新对象new,除非您有很好的理由。

+2

很好原因通常在测试中发现,您每次需要一个独立的环境。 (虽然不是这样,所以不要!:)。 – 2012-07-16 16:05:25

+0

感谢您的回复。你如何看待@Truth的方法? – 2012-07-16 16:15:24

+0

从这里看起来不错。 @真相比我有更多的经验。 – SomeKittens 2012-07-16 16:19:48