我编码是一种爱好所以我没有关于这个主题的正规教育,所以请原谅我这个问题。我真的已经对这个主题做了很多研究,但却无法得到明确的答案。
我应该在php中为数据库访问选择什么类结构?
类DatabaseObject和每个表的一个子类以及一个DatabaseObjectArray类,它扩展了ArrayObject并允许一次加载多个DatabaseObjects。 (我需要能够使用foreach或类似方法迭代它)DatabaseObject具有函数load()和store()。
类数据库和接口DatabaseObject,其中每个表与实现接口的一个类相关联。数据库可用于一次加载一个对象或加载数组中的多个对象。
应该在哪里完成sql?
如果我选择选项一,我会在DatabaseObject和DatabaseObjectArray之间有一些重复的代码,那么使用扩展的PDO类会更好吗?
例如我想要一个名为$ conditions的数组以及一个addCondition($ key,$ value,$ operator =' =')函数,以便我可以先定义条件然后load()将数据加载到对象中。(sql查询是根据$条件组装的)我应该在DatabaseObject和DatabaseObjectArray中单独定义它们还是在PDO的扩展中定义它们?
答案 0 :(得分:3)
扩展PDO
绝不是"最佳做法"。实际上它恰恰相反。而且特征只是代码味道,因为它们是由翻译驱动的复制粘贴。
基本上设置如下:
$user = new Entity\User($id);
$mapper = new Mapper\User($pdo);
$mapper->fetch($user);
if ($user->isBanned() && $user->hasExpiredBan(new DateTimeImmutable)) {
$user->removeBan();
$mapper->store($user);
}
在这种情况下,映射器不会扩展PDO,而是将其用作依赖项。至于如何与多个映射器共享同一个PDO实例,您可以查找this old post。
有关如何实现mapper本身的简单示例,您可以查看this example。