On Tue, Apr 29, 2008 at 9:22 PM, Robert Cummings <[EMAIL PROTECTED]>
wrote:

>
> On Tue, 2008-04-29 at 19:01 -0600, Nathan Nobbe wrote:
> > On Tue, Apr 29, 2008 at 6:14 PM, Richard Quadling <
> [EMAIL PROTECTED]>
> > wrote:
> >
> > > 2008/4/30 Robert Cummings <[EMAIL PROTECTED]>:
> > > >
> > > >  On Tue, 2008-04-29 at 20:04 +0200, John Carter -X (johncart -
> PolicyApp
> > > >
> > > > Ltd at Cisco) wrote:
> > > >  > I think there's been two responses to this query:
> > > >  >
> > > >  > 1. We can't have properties in interfaces because interfaces don't
> > > have
> > > >  > properties. I would say this is tautological and doesn't add
> anything.
> > > >  >
> > > >  > 2. Why would you need to? Getters and setters work.
> > > >  >
> > > >  > So I suppose to answer my question for myself, there's no real
> > > technical
> > > >  > reason for not having properties in interfaces, but getters and
> > > setters
> > > >  > work just fine and no-one (including me) really misses them.
> > > >
> > > >  I have to agree. Enforcing existence of a property is just as much
> part
> > > >  of an interface as enforcing the existence of a method. Why go down
> the
> > > >  clutzy getter and setter method route when properties were meant to
> be
> > > >  accessed. Why should code be made slower? Methods are at least an
> order
> > > >  of magnitude slower than direct property access.
> > > >
> > > >  Cheers,
> > > >  Rob.
> > > >  --
> > > >  http://www.interjinn.com
> > > >  Application and Templating Framework for PHP
> > >
> > > There are some advantages.
> > >
> > > 1 - Read only / write only properties can be created more obviously,
> > > rather than having the logic spread thoughout the __magic_functions.
> > > 2 - Automatic document tools get a real benefit from having a defined
> > > mechanism to work from.
> > >
> >
> > not only that, but the only recourse to add logic to access of previously
> > declared public variables without changing the interface is to resort to
> > magic methods.  up front, using public member variables may be enticing,
> > there are less instance methods and access is faster, sure.  but when,
> down
> > the road, some logic is required around access, and the only recourse is
> to
> > employ a magic method, what would be slower then?  the magic method doing
> > runtime introspection on the class instance prior to invoking said logic,
> or
> > having a purpose built method(s) there in the first place?  obviously the
> > later; and that is just one more reason why getters and setters, coupled
> > with hidden member variables, make sense, even in php.
>
> That should be a matter of choice for the developer. When you say "but
> when, down the road, some logic...", all I see is you waving your hands
> in the air and presuming that the logic will change. The logic may not
> change, in which case why am I incurring the cost of getter/setter
> methods. "If" the logic changes, I'll be happy to add getter and setter
> methods at that time and punt the needed functionality into the magic
> methods which will call the appropriate getter or setter method. You are
> preparing for a future that may not come, I am willing to retroactively
> handle that future "if" it arrives. Neither approach strikes me as being
> more correct but rather they each presume an educated guess on the
> likelihood of the property changing it's semantics down the road.


the developer does have a choice.  to use an interface, or an abstract
class.  data facilitates methods accomplishing what it is they purport.
quite frankly, i have never written an interface with getters and / or
setters anyway, nor do i see the need to.  i would consider it silly.
interfaces are typically used to say, any class that makes this happen will
likely do it in a way differently than all the others.  since, getters and
setters are almost always implemented the exact same way i find these topics
to be rather different.  if there is in fact a standard way of doing things
for any given interface, then to realize it, a common implementor class can
be composed, and delegated to by classes that implement said interface in
the 'standard' way.

-nathan

Reply via email to