Personally, I believed that traits are a *compile time injection* to a
class, so that at runtime a class behaves completely as it would if trait
methods were implemented directly in the class. That said, everything like
trait requirements for a certain interface, should be done at compile time
and constructions like abstract foo(); in a trait serve that purpose. IMHO.

2010/12/10 Stefan Marr <p...@stefan-marr.de>

> Hi Nathan:
>
>
> On 09 Dec 2010, at 23:42, Nathan Nobbe wrote:
> > What I'm getting at is the scenario when a trait is designed to be used
> in
> > concert with the class in which it is being used.  In this case the trait
> > expects certain functions to be available on the class in which it is
> used
> > with.  If the methods aren't there (or checked for at runtime) a fatal
> error
> > is raised.
> >
> > A quick example
> > <?php
> > class A {
> >  use AHelper;
> >
> >  function blah() {}
> > }
> >
> > trait AHelper {
> >  function meh() {
> >    // hoping we get used w/ instances of A ...
> >    return $this->blah() * 5;
> >  }
> > }
> >
> > class B {
> >  use AHelper;
> >
> >  /// waiting for a runtime error if blah() is ever called ..
> > }
> > ?>
> >
> > Do you see what I mean?
> No, do not really see what you are getting at.
>
> How is your approach using the instanceof checks (from the first mail)
> different from changing AHelper to require blah() by stating this
> requirement using an abstract method definition?
> For the trait it is not important where that method is implemented, it just
> has to be in the final composed class.
>
> So, why don't you want the following trait?
>
> trait AHelper {
>  abstract function blah();
>
>  function meh() {
>   // hoping we get used w/ instances of A ...
>   return $this->blah() * 5;
>  }
>
> }
>
> You want to avoid the fatal error during runtime, right?
>
> Do you prefer dynamic checks over compile time checks?
>
> Best regards
> Stefan
>
> --
> Stefan Marr
> Software Languages Lab
> Vrije Universiteit Brussel
> Pleinlaan 2 / B-1050 Brussels / Belgium
> http://soft.vub.ac.be/~smarr
> Phone: +32 2 629 2974
> Fax:   +32 2 629 3525
>
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>


-- 
С уважением,
Виктор

Reply via email to