繁体   English   中英

php中ArrayAccess接口的目的是什么?

[英]what is the purpose of ArrayAccess interface in php?

ArrayAccess 接口是

用于提供访问对象作为数组。

正如文档所说。 但大多数数组函数都不起作用。 普通的对象函数也有这种转换的问题。 那是什么想法。 所以例如

  1. 您不能在实现此接口的类对象上调用“array_key_exists”。
  2. 除非新类也实现了 Iterator 接口,否则类不能是可迭代的。
  3. 您不能通过 ArrayAccess 进行引用分配。(您必须自己实现(自定义函数来执行此操作)。
  4. 数组的大多数函数不适用于类实现此接口。

如果没有明确的原因,我们为什么要让自己痛苦。

这个想法是允许您使用数组语法访问对象的属性。 这通常非常方便,许多实用程序类都实现了它。 例如,Laravel 中的 Eloquent 模型实现了它,集合也是如此。

这并不意味着实现该接口的对象可以作为参数传递给数组函数之一。 然而,如果对象存储的数据是数组,那么在对象上实现类似的方法通常是有意义的——例如,Laravel 集合实现了map()filter() ,这些方法可能在内部使用它们的数组对应物。 使用这些方法通常会使代码更清晰、更容易理解,因为您可以将每个步骤链接起来。 像 JavaScript 和 Python 这样的语言(其中数组是具有这些开箱即用的方法的对象)在历史上更擅长函数式编程,并且使用 Laravel 集合之类的东西而不是数组也可以在 PHP 中实现这种编程风格。 我强烈推荐 Adam Wathan 所著的Refactoring to Collections一书了解更多详细信息。

在检查像 PsySh 这样的 REPL 中的对象时,它也很有用,因为您可以更轻松地访问单个属性。 实现Traversable也意味着您可以在检查数据时对其进行迭代。 您还可以键入提示接口,以便方法可以接受实现它的任何内容

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM