On Wed, Jul 15, 2015 at 8:31 AM, Julien Pauli <jpa...@php.net> wrote:
> On Wed, Jul 15, 2015 at 3:43 PM, Johannes Schlüter <johan...@schlueters.de>
> wrote:
>
>> Hi,
>>
>> On Wed, 2015-07-15 at 11:28 +0000, Tjerk Meesters wrote:
>> > The most notable comment was that it would be nice to support Traversable
>> > as well as arrays; instead of only supporting this for my own functions,
>> > I've generalised this so that other functions can take advantage of this
>> as
>> > well. These are the additions:
>> >
>> > 1. A ZPP argument; the "t" (for traversable) argument type has been added
>> > that checks for either an array or implementation of zend_ce_traversable.
>> >
>> > 2. A generic iteration function, called php_traverse(); it accepts:
>> >   a. the zval* to iterate over,
>> >   b. a step-wise function that receives the value and key, and returns a
>> > boolean that determines whether iteration should continue or not,
>> >   c. a traversal mode (only values, or keys and values),
>> >   d. a context that's sent to the step-wise function.
>>
>> I really like this concept to unify by access pattern, hiding the actual
>> implementation!
>>
>> > 3. A concrete implementation of a step-wise iteration function,
>> >  php_traverse_until, that gets called as part of array_every() and
>> > array_some().
>>
>> I wonder if we can find a better naming scheme. For some array_
>> functions this will work, others not. This again feeds the "PHP is so
>> inconsistent"-trolls. At the moment I'm leaning towards simply using
>> every() and some_of() without reference to a type. Or maybe introduce,
>> to restart the namespace-debate, php\every(), php\search(), php
>> \someOf(), php\product(), etc. and deprecate array_search() etc.
>>
>> johannes
>>
>>
> Nikic designed "Iter" some time ago, when he finished adding Generators to
> PHP.
> Perhaps some ideas could be taken from it.
> https://github.com/nikic/iter
>
> I suggest writing an RFC and target 8.0, while the deprecations could
> target 7.X
>
> Also, there has been an open subject for ages about how could we uniform
> array and Traversable internally, as well as from PHP user land (the main
> subject was then to add support for ArrayAccess to every array_***() PHP
> function).
>
> I'm happy this bumps the subject up , as it is quite a hot topic.

Do note that the union types RFC would also alleviate some of this
pain for user-land functions, since `array | Traversable` would cover
the required access pattern. I think this is a superior approach
myself, but I may be a bit biased as I am authoring that proposal:
https://wiki.php.net/rfc/union_types

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

Reply via email to