Re: Property Accessors v1.2 : Interfaces

From: Date: Tue, 16 Oct 2012 03:43:41 +0000
Subject: Re: Property Accessors v1.2 : Interfaces
References: 1 2 3 4 5 6 7 8 9  Groups: php.internals 
Request: Send a blank email to internals+get-63428@lists.php.net to get a copy of this message
On 16/10/12 13:37, Clint Priest wrote:
On Mon, Oct 15, 2012 at 6:02 PM, Clint Priest<cpriest@zerocue.com> wrote: Because fundamentally interfaces are designed to explain a way of communicating and properties are symmetrical and non-
observable.
The implementing class cannot "know" when a property has changed.
Do you agree that there is nothing that distinguishes class A {
    public $v;
} from class B { private $_v; public $v { get { return $this->v; }; set($n) { $this->v = $n; }} } when it comes to a client of B reading and writing to $b->v ? That's the entire point of accessors: being able to seamlessly intercept usages of properties with custom code. If you define an interface saying interface A { public $v { get;set;} } you are only saying to the user: objects of type A will have a property $v that you can read and write to. Whether it is a set of accessors or a property belongs to the implementation detail of the class implementing A, the user should not be able to see a difference when interacting with the class, as he will do it through $obj->v and $obj->v = ...; I can understand why we might not want that in PHP in order to simplify the implementation, but it we follow logical reasoning I can't see why we shouldn't implement that. I'm not sure I understand what you're getting at here Etienne, this thread was about interfaces but now you're talking about two classes...
From an interface standpoint, both classes implement the same property. One as a literal property, the other as an accessor. The point being, from the code consuming the class, a property and accessor are the same thing. Interfaces are about contracts between an implementation and a consumer, so the actual implementation is irrelevant. What matters is how the implementation is accessed by the consumer. If it is via property syntax, then it *is* a property, even though the actual implementation might be a property, an accessor or (in theory) even __get/__set. Cheers, David

« previous php.internals (#63428) next »