Drupal db_fetch_array()与db_fetch_object()的比较

Drupal db_fetch_array()与db_fetch_object()的比较,drupal,Drupal,Drupal提供了这两种方法来迭代db_query()结果。比如说, $users = array(); $result = db_query('SELECT uid FROM {users} WHERE status=0 AND login=0'); while ($row = db_fetch_object($result)) { $users[] = $row->uid; } 然而,这里似乎可以使用相同的db_fetch_数组($result),只在下一行使用$row['u

Drupal提供了这两种方法来迭代db_query()结果。比如说,

$users = array();
$result = db_query('SELECT uid FROM {users} WHERE status=0 AND login=0');
while ($row = db_fetch_object($result)) {
    $users[] = $row->uid;
}
然而,这里似乎可以使用相同的db_fetch_数组($result),只在下一行使用$row['uid']

这两种方法有什么区别?它们完全可以互换吗


来源:

区别在于
db\u fetch\u array()
返回一个数组,而
db\u fetch\u object()
返回一个对象。根据用例的不同,您可能需要一个或另一个

看起来,至少考虑到您提供的代码片段,它们确实在语法上有了变化,就像您提到的,可以在您的用例中互换

编辑 Drupal的和继承自PHP的和:Drupal只是抽象PHP的数据库特定版本,因此Drupal开发人员不必关心后端使用的是什么数据库

因此,它们在PHP中存在的原因与在Drupal中存在的原因相同。它们为开发人员提供了灵活性:有些用例需要数组,有些需要对象

在Drupal core中,
db\u fetch\u object()
db\u fetch\u array()
更受欢迎:通过转到每个函数的API页面并单击标题n functions call functionname,您可以看到每个函数在core中是如何使用的

这种偏向于
db\u fetch\u object
的原因主要是偏好和易于维护:说
$object->property
比说
$object['property']
要少一些字符。Drupal中的许多代码样式都是基于多年的惯例

您可以使用这两种方法中的任何一种,但请考虑将数据作为对象或数组在语义上是否有意义。例如,如果您想利用PHP的大量数组函数(比如
array\u merge()
,它没有简单的对象模拟),那么您可以选择违背惯例,使用
db\u fetch\u array()


在所有条件相同的情况下,
*\u fetch\u object()
*\u fetch\u array
在速度上是相同的,但是前者生成的对象比后者生成的数组占用的内存稍多。

1)你能举个例子,说明你会使用其中一个而不是另一个吗?2) 两者之间有性能差异吗?当然;为了提供更多的背景信息,我修改了我的答案。别忘了对象是通过引用传递的,而数组是通过副本传递的。这意味着,如果另一个函数修改了到处反射的对象。这可能对你有利也可能有害,这取决于你在做什么,但这通常是一个考虑因素。例如,node_load使用db_fetch_对象,因为节点在任何地方都会被修改并随意保存。