PHP中ArrayAccess接口的好处?

时间:2010-11-30 23:00:21

标签: php arrays

在PHP中实现ArrayAccess接口,我们可以将对象属性作为数组键访问。 使Object的行为类似于数组有什么好处?

就像我看到Frameworks用ArrayAccess Interface实现'FORM'然后我们可以访问(HTML)表单对象字段之类的,

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

使用$form['nameField]代替$form->nameField

的好处是什么

是'数组数据结构'的速度还是对象和数组表单之间的可移植性?

或者我错过了什么? :)

3 个答案:

答案 0 :(得分:5)

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

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

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

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

答案 1 :(得分:4)

一开始,它可以更容易/更自然地访问其密钥不构成有效标识符的成员(例如包含笨拙的字符)。例如,您可以编写$form['some-field']而不是更繁琐的$form->{'some-field'}

除此之外,它与实现__get__set__isset__unset魔术方法基本相同,只是允许使用不同的语法(并且略有不同)语义内涵)。请参阅overloading

答案 2 :(得分:1)

使用界面制作更强大的工具,更易于使用。我将它与Iterator一起用于收藏。它允许您的对象即使不是数组也像数组一样。权力来自于不将属性名称映射到数组元素,但是使用数组访问可以完全不同。

$users = new UserCollection();
$users->company = $companyid;
$user = $users[$userid];

// also
foreach( $users as $user ) {
  // Do something for each user in the system
}

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