>> > I think the warning can stay as-is, __toString is not necessarily
>> > available so casting to string in all occasions is probably not what
>> > we want.
>>
>> I think it should cast to a string if possible. You are now making
>> iterator_to_array not work with the new feature, and I find that a bit
>> silly. Whether it should be __toString (or __toKey) I don't really care,
>> but this new support for objects should be supported everywhere (and
>> that includes iterator_to_array).
>>
>
> I think this RFC is orthogonal to iterator_to_array supporting conversions
> from objects to keys.
>
> $array[$obj] = 42; does not call __toString (or __toKey), it throws a
> catchable fatal. IMO it would be inconsistent if iterator_to_array
> gracefully accepted objects as keys.

Personally I think the real problem here is that `iterator_to_array`
should *not* copy keys by default. However, what's done is done and we
need to thoughtfully consider this situation.

You already CAN return objects from an iterator; you just can't use it
in a foreach.  If you try to use that iterator in `iteator_to_array`
you get a lovely warning:

    Warning: Illegal type returned from %s::key() in %s on line %d

I'm all for *not* changing that behavior; if they want it ignore keys
then they can pass `false` as a second parameter to
`iterator_to_array`.

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

Reply via email to