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