【问题标题】:Benefits of ArrayAccess Interface in PHP?PHP 中 ArrayAccess 接口的好处?
【发布时间】:2011-05-18 04:53:03
【问题描述】:

在 PHP 中实现 ArrayAccess 接口,我们可以访问对象属性作为数组键。 让对象表现得像数组有什么好处?

就像我看到框架使用 ArrayAccess Interface 实现“FORM”,然后我们可以访问 (HTML) 表单对象字段,例如,

$form['nameField']   instead-of  $form->nameField 
$form['titleField']  instead-of  $form->titleField

使用$form['nameField]而不是$form->nameField有什么好处

是“数组数据结构”的速度还是对象和数组形式之间的可移植性?

或者我错过了什么? :)

【问题讨论】:

  • 我在一本书中读到,ArrayIterators 被推荐用于大型数据集。对于简单数据 foreach 循环就足够了。不确定 ArrayAccess ,因此...

标签: php arrays


【解决方案1】:

没有功能上的好处,而是结构性的。

如果你定义一个地图,你建议它可以包含任意数量的命名元素,这些元素是相似的。对象属性通常定义明确且类型不同。

简而言之:如果你实现ArrayAccess,你会说“我的对象(也)表现得像一个数组”。

http://en.wikipedia.org/wiki/Associative_array

【讨论】:

    【解决方案2】:

    首先,它可以更轻松/更自然地访问其键不构成有效标识符的成员(例如,包含尴尬的字符)。例如,您可以写$form['some-field'],而不是更繁琐的$form->{'some-field'}。

    除此之外,它与实现__get、__set、__isset、__unset 魔术方法基本相同,只是允许使用不同的语法(并且语义内涵略有不同)。见overloading。

    【讨论】:

    • 为什么投反对票?答案是正确的。我又投票了。
    【解决方案3】:

    使用接口可以制作更强大、更易于使用的工具。我将它与 Iterator 一起用于集合。它允许您的对象像数组一样工作,即使它不是。强大的功能不是将属性名称映射到数组元素,而是让数组访问做一些完全不同的事情。

    即

    $users = new UserCollection(); $用户->公司= $公司ID; $user = $users[$userid]; // 还 foreach( $users 作为 $user ) { // 为系统中的每个用户做一些事情 }

    在第一部分,我创建了一个用户集合的对象,并将其用户列表限制为公司 ID。然后,当我访问该集合时,我会从该公司获得具有该 ID 的用户。第二部分允许我遍历公司中的每个用户。

    【讨论】:

      猜你喜欢
      • 2012-07-05
      • 1970-01-01
      • 2010-12-05
      • 2014-03-01
      • 2014-06-20
      • 2017-03-07
      • 2014-03-16
      • 2010-11-26
      • 2018-03-18
      相关资源
      最近更新 更多