如果你想要一种面向对象的方法,这就是我最近的方法。
我把事情分成两个类,
首先,DatabaseTable 类 - 接受一个表名,一个作为该表键的字符串。其次,我创建了一个代表 DatabaseTable 中一行的 DatabaseObject 类。DatabaseObject 有两个例程 setFromRow 和 getAsRow。SetFromRow 将从 col=>value 对的关联数组中设置对象,并且 get as row 本质上会将对象序列化为 col=>value 对。
当在表上调用 select 方法时,DatabaseTable 使用 setFromRow 来制造 DatabaseObjects。相反,当它被告知更新或插入数据到其表中时,DatabsaeTable 将使用 getAsRow 序列化 DatabaseObject。
通常发生的事情是从 DatabaseObject 继承他们自己的特定对象,定义 setFromRow 和 getAsRow,并且 DatabaseTable 被告知要实例化的 DatabaseObject 的名称。
所以你最终写的代码是这样的
$dbTable = new DatabaseTable('tableName', 'uniqueid', 'InstanceType')
// dbTable manufactures an InstanceType for our use based on the select below
$dbRow = $dbTable->selectUsingId(15);
print_r($dbRow); // Dumps the InstanceTypeObject
这将我的应用程序中的数据表示(DatabaseObject)与数据库表(DatabaseTable)的管理分开。所以我的 DatabaseObject 在 C++ 术语中可以是普通的旧数据。
当然,您可以像我一样走得更远,通过创建表之间的关系,创建更多的选择方式等。
我应该补充一点,将本质上是一种过程语言(SQL)的东西与面向对象的东西结合起来并不容易,所以我知道我的方法有其缺点,你可能会得到很多不同的答案,每个答案都有自己的缺点。