【问题标题】:When To Use Object arrays over traditional arrays?何时在传统数组上使用对象数组?
【发布时间】:2013-05-18 22:58:49
【问题描述】:

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

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

【问题讨论】:

    标签: php


    【解决方案1】:

    ArrayObject 在您必须使操作对象的代码和操作数组的代码一起工作时很有用,假设不可能或不希望将代码的一部分更改为与另一部分相同的行为.

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

    我个人的看法是,ArrayObject 应该像瘟疫一样被避免,这只是 PHP 中一长串功能可疑的半生不熟的“功能”中的另一个。

    【讨论】:

    • 我已经抛出了我一直在想的关于 objarrs 的问题,你有什么可以评论的吗?
    • @DarylGill:我不确定你的意思。
    • 我知道这可能是一种风格偏好,但与传统数组相比,这似乎是一个漫长的过程
    • @DarylGill:比这更糟糕。如果你想要的只是语法糖和/或内置的引用语义,你可以简单地使用 new stdClass 并在其中存储属性。 ArrayObject 也提供了这些,如果你想实现一些更高级的场景,它可以节省你编写一些代码——就是这样。但它也迫使您使用数组表示法,同时它不适用于数组函数或接受类型提示数组参数的函数。我不知道还能怎么说,但在 IMO 看来,这已经接近于无用的废话了。
    • 啊,我明白你的意思。如果我想使用对象,请创建一个类。如果我想使用数组,请不要将这两个项目合二为一。让他们分开吗?
    【解决方案2】:

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

    ArrayObjects 可能会有一点性能损失,但在 php 5.3 中这几乎消失了。

    【讨论】:

    • 数组的面向对象版本是stdClass。在此之上,ArrayObject 唯一提供的是一些针对野蛮人的小饰品,例如用于重新排序和计数值的现成实现。
    • 据我所知,您不能将未命名的值添加到 stdClass。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 2022-10-14
    • 2018-01-02
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    相关资源
    最近更新 更多