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

Php 何时使用对象数组而不是传统数组?,php,Php,在什么情况下更适合使用: $Obj_Array = new ArrayObject(array(), ArrayObject::STD_PROP_LIST); $Obj_Array->Key = "Value"; 而是: $Array = array(); $Array['Key'] = "Value"; 现在,两者都不同了。到目前为止,我可以说,即使在进行研究之后,我也看不出有什么真正的理由比传统阵列更偏爱对象阵列 那么,有人能给我举一个活跃的例子,说明对象数组如何比普通数

在什么情况下更适合使用:

$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();

ArrayObject
在您必须使在对象上运行的代码和在数组上运行的代码协同工作时非常有用,前提是不可能或不希望更改代码的一部分使其与另一部分的行为相同

实际上,如果您控制代码的一个或两个部分,则不需要
ArrayObject
,使用它只会降低性能


我个人的观点是,应该像瘟疫一样避免使用
ArrayObject
,这只是PHP中一长串半生不熟的“特性”中的另一个,其用处令人怀疑。

这是一个首选样式的问题。 PHP5中引入的新ArrayObject是arrays的面向对象版本。 许多程序员更喜欢OO风格的编程,而旧的数组不适合OO世界


ArrayObject可能会有一点性能损失,但在PHP5.3中,这种情况几乎消失了

我已经解释了我一直在思考的奥贾尔斯,你有什么可以评论的吗?@DarylGill:我不知道你的意思。我理解这可能是一种风格偏好,但与传统风格相比,这似乎是一个冗长的过程arrays@DarylGill:比那更糟。如果您只需要语法糖和/或内置引用语义,那么只需使用
新stdClass
并在其中存储属性即可
ArrayObject
也提供了这些功能,如果您想实现两个更高级的场景,它可以为您节省编写代码的时间,仅此而已。但它也强制您使用数组表示法,同时它不适用于数组函数或接受类型暗示数组参数的函数。我不知道该怎么说,但在我看来,这几乎是毫无用处的废话。啊,我明白你的意思。如果要处理对象,请创建一个类。如果我想使用数组,请不要将这两项混为一谈。将它们分开?数组的面向对象版本是
stdClass
。除此之外,
ArrayObject
提供的唯一功能是为野蛮人提供一些小饰物,例如用于重新排序和计算值的现成实现。据我所知,您不能向stdClass添加未命名的值。