Re: [RFC] Intersection Types

From: Date: Thu, 28 Apr 2016 15:49:44 +0000
Subject: Re: [RFC] Intersection Types
References: 1 2 3  Groups: php.internals 
Request: Send a blank email to internals+get-92869@lists.php.net to get a copy of this message
> Am 28.4.2016 um 17:11 schrieb guilhermeblanco@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 <joshdifabio@gmail.com> > wrote: > >> On Thu, Apr 28, 2016 at 4:54 AM, Levi Morrison <levim@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

« previous php.internals (#92869) next »