Re: Re: [RFC] Traits with interfaces

From: Date: Sun, 06 Mar 2016 02:03:51 +0000
Subject: Re: Re: [RFC] Traits with interfaces
References: 1 2 3 4 5  Groups: php.internals 
Request: Send a blank email to internals+get-91514@lists.php.net to get a copy of this message
Your class 'c' example (last link) only shows method 'bar' (the trait method) and not 'bat' (the aliased metod). The class has both, but 'bat' is hidden from get_class_methods() because it is private. On 6 Mar 2016 10:16 am, "Davey Shafik" <davey@php.net> wrote: > On Fri, Mar 4, 2016 at 2:06 AM, Rowan Collins <rowan.collins@gmail.com> > wrote: > > > Davey Shafik wrote on 04/03/2016 07:17: > > > >> 1. If you simply alias (use foo { bar as bat; }) then you end up with an > >> *additional* method with the new name, the trait method as defined is > >> still > >> brought in, and_will_ override inherited methods of the same name. > >> > > > > Here's a clearer example of this: > > https://3v4l.org/RKHPt > > > > Unfortunately, you can't even use "insteadof" to directly bring the > parent > > method back in [https://3v4l.org/qOS5T], but you can stub it out with a > > direct call to parent:: [https://3v4l.org/s9i4N]. > > > > 3. Doing this (visibility + name)_only_ gives you the new method, which > is > >> _different_ behavior to #1 > >> > > > > I can't reproduce this: if I say "bar as private bat", the trait's bar > > still shows up, and is public, just as in the previous example: > > https://3v4l.org/1jH6o > > > > Your examples are rather confusing because they are effectively applying > > the same trait twice, at different levels of the hierarchy; I'm not sure > > this is a particularly likely scenario, or relevant to how interfaces > > should behave. > > > > Regards, > > > Rowan, > > You are mid-reading, none of the classes in my examples extend the others, > they are all just using the same trait in different ways. > > - Class a: use the trait with no aliases. Result: as expected > - Class b: use the trait with a simple alias, no visibility change. Result: > both methods > - Class c: use the trait with and alias both name, and change visibility. > Result: ONLY the aliased method > - Class d: use the trait and "alias" to the same name, ONLY changing > visibility. Result: causes a Fatal error, clashing with itself o.O > > For the one you can't re-produce, it's class 'c', which is stand-alone > here: https://3v4l.org/K9o6Y > > - Davey >

« previous php.internals (#91514) next »