Why is ArrayAccess allowed? If an object implements ArrayAccess, but not Traversable, passing it to foreach is going to iterate on its visible properties (`public` in this case). That doesn't seem correct.