Разница в том, что db_fetch_array()
возвращает массив, тогда как db_fetch_object()
возвращает объект. В зависимости от варианта использования вам может понадобиться один или другой.
Похоже, что, по крайней мере, учитывая предоставленный вами фрагмент, они действительно - с измененным синтаксисом, как вы упомянули, - взаимозаменяемы для вашего варианта использования.
Редактировать
Drupal db_fetch_object()
и db_fetch_array()
унаследованы от PHP *_fetch_object
и *_fetch_array
: Drupal просто аннотации Версии, специфичные для баз данных PHP, поэтому разработчику Drupal не нужно заботиться о том, какая база данных используется в бэкэнде.
Итак, те же причины, по которым они существуют в PHP, - это те же причины, по которым они существуют в Drupal. Они обеспечивают гибкость для разработчиков: некоторые сценарии использования требуют массивов, некоторые требуют объектов.
В ядре Drupal db_fetch_object()
предпочтительнее, чем db_fetch_array()
: вы можете увидеть, как каждый из них используется в ядре, перейдя на страницу API каждой функции и щелкнув по заголовку n, вызов функции имя функции .
Причиной этого смещения в сторону db_fetch_object
является в основном предпочтение и простота обслуживания: для обозначения $object->property
меньше символов, чем для $object['property']
. Большая часть стиля кода в Drupal основана на многолетнем соглашении.
Вы можете использовать любой из них, но подумайте, имеет ли смысл семантически, чтобы ваши данные были объектом или массивом. Например, если вы хотите воспользоваться множеством функций PHP для работы с массивами (например, array_merge()
, у которого нет простого аналога объекта), вы можете отказаться от соглашения и использовать db_fetch_array()
.
При прочих равных условиях *_fetch_object()
идентичен *_fetch_array
по скорости, но результирующий объект из первого занимает немного больше памяти, чем результирующий массив из второго.