On Sat, Dec 19, 2020 at 2:24 PM tyson andre <tysonandre...@hotmail.com> wrote:
> I've created a straw poll for the naming pattern to use for `*any()` and > `*all()` on iterables. > https://wiki.php.net/rfc/any_all_on_iterable_straw_poll > > This is probably going to be a terrible idea because it involves a little magic but... "iterable" is already a forbidden userspace class name since it's reserved for the psuedo-type which is a union of `Traversable | array`. What if we went ahead and defined an actual (abstract-final) `iterable` class. The parser rules which treat `iterable` as a special type still apply, so we never try to match instances of class `iterable`, but what we can do is define methods on it. class Iterable { static public function any(iterable $iter, Callable $predicate): bool { ... } static public function all(iterable $iter, Callable $predicate): bool { ... } } Then the API is both 100% searchable (the man page for iterable can explain that it's a pseudo-type AND that it has helper methods), and intuitive to read/write. if (iterable::any($iter, fn($elem) => $elem === 'foo')) { }