On Fri, 2008-04-18 at 13:54 -0600, Nathan Nobbe wrote: > On Fri, Apr 18, 2008 at 1:42 PM, Robert Cummings <robert@xxxxxxxxxxxxx> > wrote: > > > Nope, the point is moot. If I've made my properties publicly accessible, > > now, due to the ability to trap via __get() or __set(), I can remove > > them and handle them. Thus, I can retrospectively change the semantics > > without care for having exposed the properties themselves. The point is > > moot here because the option now exists to enhance properties at a later > > date without the need to drive the enhancements through a method the > > user must call (the details of __get() and __set() are hidden from the > > user of the properties ;) > > > i see your rationale now, and yes i agree, using the magic methods does > afford the ability to make transparent changes and thats great. however, > what im saying is thats still encapsulation, just a different way of > attaining it. I'm not arguing against encapsulation, only indicating that there's no longer a point to differentiating between method wrapping and property access in PHP (although maybe there's some fringe differences-- I haven't played with it much at this time). > and the other negative of that approach is having to bulk up > the logic in the magic methods. i tend to use them to handle attempts to > access non-existent params. Why bulk up your magic methods? Keep them slim... <?php class Foo { function __get( $name ) { if( method_exists( $this, 'get'.ucFirst( $name ) ) ) { return $this->{'get'.ucFirst( $name )}(); } return null; } function getName() { return 'Namicus Orealeeyus'; } } $foo = new Foo(); echo $foo->name."\n"; ?> Or if you want to pick and choose... <?php class Foo { function __get( $name ) { static $map = array ( 'name' => 'getName', ); if( isset( $map[$name] ) ) { return $this->{$map[$name]}(); } return null; } function getName() { return 'Namicus Orealeeyus'; } } ?> > actually, tho drifting a bit; i think the __call() magic method is great > because it allows handling of what would otherwise be a fatal error when > trying to invoke a non-existent class method. Very useful for things like SOAP. Cheers, Rob. -- http://www.interjinn.com Application and Templating Framework for PHP -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php