【问题标题】:Why implement two interfaces that already extend each other?为什么要实现两个已经相互扩展的接口?
【发布时间】:2012-07-07 03:08:28
【问题描述】:

我正在尝试了解有关 ArrayObjectArrayIterator 类的一些信息

ArrayObject:该类实现了IteratorAggregateTraversable 接口。既然IteratorAggregate扩展了Traversable本身,为什么ArrayObject可以同时实现IteratorAggregate呢?

ArrayIterator:如上,这个类实现了IteratorTraversableIterator扩展了。

当这些类可以实现扩展Traversable 的接口时,为什么要实现两个接口?

【问题讨论】:

  • 我怀疑这些链接只是为了使手册更清晰,更可遍历(ha)-具有讽刺意味的是,在您的情况下,这似乎产生了完全相反的效果。我认为您是正确的,更正确的说法是它们分别实现了IteratorAggregateIterator 接口。
  • ...尽管it would seem 你可以用这种看似矛盾的方式编写代码,PHP 不会抱怨。
  • 我认为 Java 也不会抱怨,但尚未对其进行测试。这就像声明未经检查的异常:多余但不是错误。

标签: php spl arrayobject arrayiterator


【解决方案1】:

根据SPL source code,ArrayObject 没有直接实现Traversable

class ArrayObject implements IteratorAggregate, ArrayAccess, Countable
{
    ...
}

这与SPL documentation 匹配。我相信 DaveRandom 是正确的。

【讨论】:

  • 我查看了链接,看起来 ArrayObject 和 ArrayIterator 类都没有直接实现 Traversable 接口,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-22
  • 1970-01-01
相关资源
最近更新 更多