我已经阅读了有关上述问题的一些教程和讨论,但是在使用其中的一个之前,我想知道我的解决方案是否可以接受。问题是我不想将我的Db类扩展到我所有运行查询的类(感觉很奇怪),根据建议之一,我也不确定构造函数或self实例是否必不可少。我并不反对他们,也许我只是在程序世界中花费了太多时间。
因此,我有一个带有常规参数的经典Db类。我想在其他类中运行查询,所以我认为我只是将PDO作为参数传递。我可以像这样使用它吗,这会有回扣吗?
<?php
include 'db.php'; // usual stuff, returns PDO
$obj = new Db;
$obj->connect();
class User { // in a separate file, normally
public function getUser($obj) {
$res=$obj->connect()->query("SELECT * FROM users");
$row=$res->fetch();
print_r($row);
}
}
$u=new User;
$u->getUser($obj);
?>
答案 0 :(得分:3)
制作一个User服务/存储库类,该类处理您要与用户一起做的所有事情。将数据库传递给该数据库。界面示例:
interface UserServiceInterface
{
public function __construct(Db $db);
public function createUserFromArray(array $data) : User;
public function findUser(int $id) : User;
public function deleteUser(int $id) : bool;
//etc, toArray, whatever else you might need
}
将您的用户保留为纯旧的PHP对象(POPO),其中包含字段的获取器和设置器。