I want to make a case for `Spl`. Aside from autoloading (which really
ought to be in core but since "spl" is literally in the name of those
functions it's kind of stuck), the SPL is mostly data structures and
iterator related functionality. It makes perfect sense to me that
iterator related behavior like these iterable functions being proposed
should be included in the SPL. The `Spl` namespace is short, and its
brevity doesn't lose any meaning because the SPL has been around in
core since PHP 5.3 (I think?).

I do think we need to propose at least a few more things at the same
time to help set the correct patterns and precedent. I'm leaving off
the namespace here:

Variants on what is already proposed:
- any_value(iterable $of, callable $satisfies)
- all_values(iterable $of, callable $satisfy)

These are iterable primitives to implement many other routines:
- reduce_values(iterable $of, callable $by) // throws if there isn't
at least 1 value
- fold_values(iterable $of, $withInitial, callable $by) // like reduce
but doesn't throw since it can use an initial
- to_iterator(iterable): Iterator // to be able to write the previous
two functions in a generic way

New iterators (I have a patch for the first one:
https://github.com/morrisonlevi/php-src/tree/spl/ForwardArrayIterator)
- ForwardArrayIterator // to have an efficient iterator for Array
(ArrayIterator nearly always duplicates the array)
- ReverseArrayIterator // long overdue

Less certain on these specific names but this functionality is common:
- values(iterable $of): iterable // only returns values (does not
fetch keys at all)
- keys(iterable $of): iterable // returns the keys as values (does not
fetch values at all)

Some common ones like map and filter have a bit more nuance because

-----

One of the arguments against using the SPL is that much of its
existing design is... well, weird and sub-optimal in many cases. At
least a few people recommend against using SPL data structures and
iterators because of this. However, I think the `Spl` namespace can
separate these well enough.

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php

Reply via email to