【问题标题】:When to fetch database results as Object and Arrays in PHP? and Why?何时在 PHP 中将数据库结果作为对象和数组获取?为什么?
【发布时间】:2015-07-28 22:05:11
【问题描述】:

我总是以Arrays 而不是Objects 获取数据库结果,原因是PHP 提供了如此多的函数来操作arrays,这让我的生活变得轻松。

我检查了这个 SO 问题 Objects or Arrays?

但它没有回答我的问题。以前在我的项目中工作的人总是以Objects 获取结果,这让我很难将其转换为arrays,然后再操纵它们,因为我正在生成潜在客户统计信息。 数组函数让它变得简单。

有没有简单的方法可以做到这一点?或任何其他选择?为什么选择Objects 而不是Arrays

注意:我不考虑performance,而是考虑我的ease of manipulation

【问题讨论】:

  • 也许尝试将结果中的对象转换为ArrayObjects,然后使用:getArrayCopy() 将其转换为数组(也许您甚至不必将其转换为数组,如果 arrayObject 具有您想要的功能:php.net/manual/en/class.arrayobject.php)。或者您也可以尝试简单地投射它们,例如$array = (array) $myObject;
  • 我不知道 ArrayObjects。是的,当我使用强制转换时,它对多维对象起作用,只是第一级中的元素变成了数组而不是元素的数据,它仍然是对象,然后我不得不使用 foreach 循环将它们转换为数组
  • 我现在将尝试 ArrayObjects...感谢您的建议,但我仍然不明白为什么人们选择 Objects!
  • imo。如果从查询返回的数据表示自定义对象的“状态向量”,那么使用对象会很有用,因为您可以访问所有“方法”来操作数据。另一个优点是“属性访问”,它可以在代码中更好地阅读。 ArrayObject 类非常有用,因为它允许“属性访问”和“索引访问”。
  • 选择对象而不是数组的一个原因是,您的代码可以说“此结果行由Visit 对象表示,该对象具有$id$ip_address$visit_time、等等...”,然后您不必阅读查询(可能是十个文件之外,动态生成或一百行长)来知道您应该使用哪些字段。你可以使用static analysis toolsvalidate your code while you write it

标签: php mysql arrays foreach


【解决方案1】:

在 PHP 中,返回 stdClass 对象的实例优于普通数组的重要优势绝对为零。

你明白了,如果你返回一个数组,你可以使用php函数array_*的moltitude来操作数据,这是一个很大的优势。

当然,在任何一种情况下,您都可以通过简单地转换来来回转换为对象和数组:

$array = (array) $object;
$object = (object) $array;

您可以选择获取对象,因为在查询数据库时使用 ORM 是一种常见的做法。 (强制引用:ORM vietnam

请注意,使用 PDO 您可以根据查询返回您指定的对象,例如:

$stmt = $dbh->query("SELECT * FROM animals");
$stmt->setFetchMode(PDO::FETCH_INTO, new animals);

但此时你应该使用 ORM,如果你需要对象

【讨论】:

  • 对不起..我不太明白..你能给我一个外行的解释吗?我不使用 ORM。我使用的是 Code Igniter 的活动记录。所以你的意思是说使用ORM时应该使用Objects?
  • Active Record 是一种 ORM 模式。为了更好地理解差异,请尝试阅读此处:culttt.com/2014/06/18/… 要回答您的第二个问题,是的:使用 ORM 时,您正在操作对象
  • 好的,我明白了,所以每当我需要操作它时,我总是可以将它们转换为数组并做我的事情!谢谢
猜你喜欢
  • 2011-11-19
  • 2020-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-12
  • 1970-01-01
相关资源
最近更新 更多