在PHP中实现ArrayAccess接口,我们可以将对象属性作为数组键访问。 使Object的行为类似于数组有什么好处?
就像我看到Frameworks用ArrayAccess
Interface实现'FORM'然后我们可以访问(HTML)表单对象字段之类的,
$form['nameField'] instead-of $form->nameField
$form['titleField'] instead-of $form->titleField
使用$form['nameField]
代替$form->nameField
是'数组数据结构'的速度还是对象和数组表单之间的可移植性?
或者我错过了什么? :)
答案 0 :(得分:5)
没有功能上的好处,但是结构性的。
如果你定义一个地图,你建议它可以包含任意数量的命名元素,这些元素类似。对象属性通常定义良好且类型不同。
简而言之:如果你实现ArrayAccess
,你说“我的对象(也)就像一个数组”。
答案 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的用户。第二部分允许我迭代公司中的每个用户。