> Am 28.4.2016 um 17:11 schrieb guilhermebla...@gmail.com:
> 
> Nice!
> 
> I've read the RFC and there's only one missing thing that is either
> undocumented or missed during patch creation: instanceof.
> I'd be amazing if we could do: $foo instanceof Foo & Bar
> 
> Cheers,
> 
> On Thu, Apr 28, 2016 at 5:00 AM, Josh Di Fabio <joshdifa...@gmail.com>
> wrote:
> 
>> On Thu, Apr 28, 2016 at 4:54 AM, Levi Morrison <le...@php.net> wrote:
>>> Internals,
>>> 
>>> As alluded to last week I have another RFC for improving the type
>>> system: [intersection types][1].
>>> 
>>> It allows parameters to define multiple type constraints that must be
>>> satisfied. Common combinations of our built-in types include
>>> `ArrayAccess & Traversable & Countable` and `Countable & Iterator`.
>>> 
>>> Some people have suggest I merge this and union types into one RFC.
>>> For now I'll just proceed with them separately to gain feedback.
>>> 
>>>  [1]: http://wiki.php.net/rfc/intersection_types
>>> 
>>> --
>>> PHP Internals - PHP Runtime Development Mailing List
>>> To unsubscribe, visit: http://www.php.net/unsub.php
>>> 
>> 
>> To me, it seems that intersection types are more useful than union
>> types (other than the obvious null|Foo and array|Traversable cases) as
>> they'd allow us to write smaller interfaces and better follow ISP in
>> userland, with interfaces becoming much more convenient for
>> documenting the requirements of a parameter.
>> 
>> At present we tend to have incomplete implementations of interfaces
>> (e.g. throw OperationNotSupportedException). Union types would allow
>> us to create more, smaller interfaces and avoid situations where the
>> type of a parameter doesn't accurately reflect the method's true
>> requirements, or where concretions are incomplete implementations of
>> an interface.
>> 
>> Thanks for your efforts, Levi, I'm excited about this one!
> 
> -- 
> Guilherme Blanco
> Lead Architect at E-Block

Who’s top-posting here? ;-)

Regarding your suggestion, $foo instanceof Foo & Bar is conflicting with 
bitwise and here. Anyway, you already can $foo instanceof Foo && $foo 
instanceof Bar. Which is IMO just as easy, not conflicting and more flexible.
Also, instanceof would not (at least not currently) work with scalar types, 
array or callable. (i.e. $foo instanceof string doesn’t work). And thus $foo 
instanceof Foo & callable doesn’t either. Which is quite a difference to 
intersection/union types.

Bob




Reply via email to