何时使用对象数组而不是传统数组?

3
在什么情况下使用更为适用:
$Obj_Array = new ArrayObject(array(), ArrayObject::STD_PROP_LIST);
 $Obj_Array->Key = "Value";

而:

 $Array = array(); 
 $Array['Key'] = "Value"; 

现在,这两种数组是不同的。即使经过研究,我也看不出为什么要偏爱对象数组而不是传统数组...所以,有人能给我展示一下对象数组如何比普通数组更有优势的实际例子吗?
此外,我知道这些对象数组对于PHP来说相当新颖...但几乎所有的数据库函数都返回数组或单个变量:
$Query = $DB->prepare("SELECT * FROM TBL WHERE col=?");
$Query->bind_param('s',$Variable); 
$Query->execute();
$Query->bind_result($Col1, $Col2, $Col3);
$Query->fetch();
$Query->close(); 

上面的示例将内容作为单个变量返回。
因此,使用while循环来创建对象数组:
$Obj_Array = new ArrayObject(array(), ArrayObject::STD_PROP_LIST);
$Key_Creation = 0;   

$Query = $DB->prepare("SELECT Username,Password FROM TBL WHERE col=?");
$Query->bind_param('s',$Variable); 
$Query->execute();
$Query->bind_result($Col1, $Col2);
while($Query->fetch()){
  $Obj_Array->$Key_Creation = array($Col1,$Col2);
  $Key_Creation++;
}
$Query->close();
2个回答

2

ArrayObject是一个有用的工具,当你需要让操作对象和操作数组的代码协同工作时使用它。假设不方便或者不可能改变其中一部分代码来适应另一部分的行为。

实际上,如果你可以控制其中一部分或两部分代码的话,就不需要使用ArrayObject,因为它只会降低性能,对你没有任何好处。

我个人认为ArrayObject应该像瘟疫一样被避免,它只是PHP中众多毫无用处的“特性”之一。


我已经思考了一下objarrs的问题,你有什么可以评论的吗? - Daryl Gill
@DarylGill:我不确定你的意思是什么。 - Jon
我理解这可能是一种风格偏好,但与传统数组相比,这似乎是一个冗长的过程。 - Daryl Gill
@DarylGill:情况比这更糟。如果你只想要语法糖和/或内置的引用语义,你可以简单地使用new stdClass并在其中存储属性。ArrayObject也提供了这些功能,如果你想实现一些更高级的场景,它可以帮助你节省编写代码的时间 - 就是这样。但它也强制你使用数组表示法,同时它不能与数组函数或接受类型提示数组参数的函数一起使用。我不知道该怎么说,但在我看来,它非常接近于无用的废物。 - Jon
啊,我明白你的意思了。如果我想要使用对象,就创建一个类。如果我想要使用数组,不要把两个项目混在一起。保持它们分开? - Daryl Gill
@DarylGill:差不多就行了。 :-) - Jon

1

这是一种偏好风格的问题。 PHP 5引入了新的ArrayObjects,它是数组的面向对象版本。 许多程序员更喜欢面向对象的编程风格,而旧的数组不适合面向对象的世界。

使用ArrayObjects可能会有一定的性能损失,但在php 5.3中,这个问题已经几乎消失了。


数组的面向对象版本是stdClassArrayObject提供的唯一额外功能是为野蛮人提供了一些小玩意,例如重新排序和计算值的现成实现。 - Jon
据我所知,您无法向 stdClass 添加未命名的值。 - CodeTower

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接