I'm going to agree with David here. It is most sensible to either allow
properties AND accessors in interfaces, or don't allow either of them.
__get/__set is a different subject that I'd rather not dig into while
discussing this RFC.

On Mon, Oct 15, 2012 at 8:43 PM, David Muir <davidkm...@gmail.com> wrote:

> On 16/10/12 13:37, Clint Priest wrote:
>
>> On Mon, Oct 15, 2012 at 6:02 PM, Clint Priest<cpri...@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
>
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>

Reply via email to