On Fri, 2008-04-18 at 11:50 -0700, Jim Lucas wrote: > Nick Stinemates wrote: > >>> Data Hiding IS Encapsulation. > >>> But, you have to agree, > >>> <?php > >>> class Lol { > >>> private $bar; > >>> public function getBar() { return $bar } > >>> public function setBar($bar) { $this->bar = $bar} > >>> } > >>> ?> > >>> Is no different than: > >>> <?php > >>> class Lol { > >>> public $bar; > >>> } > >>> ?> > >>> Here's a more thought out argument from > >>> http://www.javaworld.com/javaworld/jw-09-2003/jw-0905-toolbox.html : > >>>> A fundamental precept of OO systems is that an object should not expose > >>>> any of its implementation details. This way, you can change the > >>>> implementation without changing the code that uses the object. It follows > >>>> then that in OO systems you should avoid getter and setter functions > >>>> since they mostly provide access to implementation details. > >>>> > >>>> To see why, consider that there might be 1,000 calls to a getX() method > >>>> in your program, and each call assumes that the return value is of a > >>>> particular type. You might store getX()'s return value in a local > >>>> variable, for example, and that variable type must match the return-value > >>>> type. If you need to change the way the object is implemented in such a > >>>> way that the type of X changes, you're in deep trouble. > >> No,but in the first one, you can control, from within the class/method, > >> what data is actually allowed to be injected into that variable. Whereas > >> the second example would allow you to stuff any type of data into that > >> class variable. That might not be a good thing. > >> > > > > That's a relatively narrow minded response to my point, since I gave > > a pretty concrete example of exactly what I meant, followed by a great > > article which furthered my point. > > > > Let me quote, you said this: "Is no different than" You are wrong, in fact it > IS different. Having your own custom methods to get or set data allows you to > have more control over what data is injected into your object. > > I would call is a personal preference which may not work for you, but works fine > for me. > > All I can say is that all my __set methods do data sanitizing and validation, > which is were I think it should be done. If anybody thinks this might be a bad > thing, please by all means explain why it is bad. > > > > The general rule of encapsulation is: Don't ask an object for data, ask > > the object to work with the data. > > > > I hope it checks the data first before using it. If you don't then you might > end up with something you had not planned on. > > If I am not to ask an object for data how is my db class/object ever going to > return me data from my database? What he means is don't ask for the data literally (by property name) ask for it via a method. This allows wrapping the data in "work". This is a moot issue in PHP since PHP allows trapping the property accessor. 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