I guess my thought behind it was that __set() is supposed to be called whenever 
writing data to inaccessible properties, I sought not to change the default 
behavior of __set().  In the case of adding a read-only keyword was that it was 
explicitly stating that the property cannot be written to in any way.

-----Original Message-----
From: Sebastian Krebs [mailto:krebs....@googlemail.com] 
Sent: Saturday, February 04, 2012 12:21 PM
To: internals@lists.php.net
Subject: Re: [PHP-DEV] Re: internals Digest 4 Feb 2012 09:08:29 -0000 Issue 2549

Hi,

Am 04.02.2012 19:13, schrieb Clint M Priest:
>
>
> -----Original Message-----
> From: Rasmus Schultz [mailto:ras...@mindplay.dk]
> Sent: Saturday, February 04, 2012 10:01 AM
> To: internals@lists.php.net
> Subject: [PHP-DEV] Re: internals Digest 4 Feb 2012 09:08:29 -0000 
> Issue 2549
>
>> Why can't the read-only and write-only keywords be implicit instead of 
>> explicit? I've never seen another language where you have to explicitly 
>> indicate what you're doing. At>  best, it acts an extra fail-safe to prevent 
>> making errors - at worst, it just means more redundant code to maintain, 
>> more ways to make errors. Do the benefits really outweigh>  the value of 
>> this?
>
> The read-only and write-only keywords act a little differently.  Without 
> them, attempting a set on an accessor without a setter defined will cause 
> __set() to be called whereas with the read-only it will produce an error.  
> The inverse is true for write-only.   I attempted to keep the ability to have 
> lazy initializing of properties via accessors, but that could be written in 
> php slightly differently if the read-only/write-only keywords were not 
> present (due to guards).  Doesn't particularly matter to me.


Just curious: Why? Whats the benefit in allowing "get" directly and "set" via 
__set() at the same time?

>
>> Regarding automatic implementations - according to the wiki, the 
>> backing field is implemented as public. Is that correct? Most other 
>> languages don't even expose the existence of the backing field. Would it not 
>> be more correct to implement an auto-backing field as protected? The reason 
>> for implementing accessors in the first place, is usually to prevent direct 
>> access to an underlying field.
>
> Makes sense, in C# these backing fields are completely inaccessible directly, 
> would that be even better in this case or would protected suffice?
>
>> Since a high degree of explicitness seems to be a design goal, it 
>> would probably make more sense if you had to use reflection to access a 
>> backing-field without invoking the accessor-methods.
>
>> Looks nice otherwise! :-)
>
>> - Rasmus
>
> 2012/2/4<internals-digest-h...@lists.php.net>
>
>> From: Clint M Priest<cpri...@zerocue.com>
>> To: "internals@lists.php.net"<internals@lists.php.net>
>> Cc:
>> Date: Fri, 3 Feb 2012 13:47:53 +0000
>> Subject: [PATCH] Property Getters/Setters (v2.4) for review The 
>> property accessor functionality is done and is detailed here:
>> https://wiki.php.net/rfc/propertygetsetsyntax-as-implemented
>>
>> Core Patch:
>> http://www.clintpriest.com/patches/php-core/accessors/2.4.diff
>>
>> The core patch encompasses the entire original RFC and the 
>> as-implemented includes implementation details and edge cases not 
>> defined by the original RFC.
>>
>> Most changes are in zend_compile, zend_object_handlers and 
>> zend_language_scanner.
>>
>> Thanks,
>>
>> -Clint
>


--
PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: 
http://www.php.net/unsub.php


--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to