调用在PHP类之外创建的对象(在类中)

时间:2014-01-08 15:14:55

标签: php database oop object pdo

我对OOP很新,所以这个问题更多地与理论有关,而不是我的实际代码。我目前无法访问我的代码,但很快就会添加它。

我有一个'数据库'类,它允许我创建新的PDO连接并与各种数据库交互。我在创建对象时传递数据库连接细节,__ construct方法使用这些值构建PDO连接。

然后我有各种与数据库交互的方法,例如准备,执行等

我为每个需要的连接创建了一个对象,这使我可以通过调用我想要使用的对象和方法来快速查询我的任何数据库。

我希望创建另一个名为'users'的类,它允许我与users表进行交互。我想要添加,删除和放大的方法修改用户详细信息我希望使用现有对象在每个方法中查询数据库。而不是必须创建一个新对象并传递连接细节(所以我只需要更新创建原始对象的连接细节,而不是在多个位置更新它。

似乎我无法做到这一点,因为我的“数据库”对象超出了我的“用户”类的范围。

有人可以告诉我如何在'用户'类中提供此对象吗?更重要的是这是错误的做法,还有更好的做法吗?

3 个答案:

答案 0 :(得分:0)

您可以考虑使您的数据库类保持静态(因此可以使用Database::Query()等从“任何地方”访问它。

但是在这种情况下,拥有单例更合适,您将创建一个数据库类实例并在所有对象中使用它。

PHP中的Google单例作为指南,但一个常见的模式是在数据库上有一个静态方法GetInstance(),这将创建一个尚未存在的Database的新实例

答案 1 :(得分:0)

将数据库对象简单地作为特定用户类对象的参数传递:

$userobject->createUser($databaseobject);

或在创建用户对象时传递它:

$userobject = new User($databaseobject);

答案 2 :(得分:0)

每个数据库只需要一个PDO对象。

除非你打算做相当热门的事情,否则我怀疑你永远不会需要多个数据库(有多个表)。 创建一个多重数据库处理的通用层对我来说似乎有点过分。

您现在似乎正在做的是每次要访问同一数据库的任何部分时创建数据库连接。

获得PDO数据库句柄后,您可以使用它来访问数据库的任何部分。每次实例化PDO对象时,都会创建到同一个DB的新连接。

由于同时进行数据库连接的数量有限,因此无缘无故地占用昂贵且稀缺的资源。

所以我的建议是使PDO对象成为静态类变量,并通过继承同一个PDO对象的单个实例来构建任何访问器类。