I'm saying that when you define an accessor, the body of the get/set
functionality is contained within get {} and set {}, just like C#. I'm
referencing your suggestion to automatic backing fields. There's no need for
the backup.
Reflection for accessors should be treated the same as the rest. Since there
is a definition for each get and set, Reflection{Property/Accessor} should
treat invocations of those separately, so I agree with that, but Reflection
hasn't failed us so far. :)
On Dec 7, 2011, at 1:33 PM, Rasmus Schultz wrote:
> I have no opinion about how it gets implemented under the hood - I thought
> we were just discussing the syntax. I most likely don't know enough about
> the innards of PHP it carry on that discussion.
>
> But by userspace definitions, are you referring to the fact that getters
> and setters would compile down to actual methods? I have no strong feelings
> about that one way or the other - as long as the reflection API reports
> what was defined in the source code, rather than reflecting the underlying
> accessor-methods as actual methods. (something that doesn't seem to be true
> for traits...)
>
> I don't know if that's meaningful or relevant to you, but I think that's
> all I can contribute to that discussion...
>
> On Wed, Dec 7, 2011 at 1:11 PM, Will Fitch <[email protected]> wrote:
>
>> The difference being *where* the functionality gets mapped. It's not
>> about making something "look like something else", it's about requiring
>> more userspace definitions. Functionality within get {} and set {} can
>> (and should IMO) be implemented outside of userspace code. Whether that
>> means another union within op_array or a completely new structure mapped to
>> a property zval and bitmap added to the zend_uchar type identifying it as
>> an accessor.... I'm saying be creative - don't just implement something
>> halfway for the sake of getting it done.
>>
>>
>> On Dec 7, 2011, at 12:50 PM, Rasmus Schultz wrote:
>>
>>>> if we're attempting to get around __set/get, let's not replace them with
>>> more method implementations
>>>
>>> I don't understand this argument. Accessors are methods - making them
>> look
>>> like something else won't change that fact.
>>>
>>> In C#, type-hinted properties with automatic getters/setters actually
>>> compile down to two method implementations, while implemented
>>> getters/settings do the same, substituting "value" for whatever is
>> required
>>> to access the auto-implemented backing field.
>>>
>>>
>>> On Tue, Dec 6, 2011 at 9:26 AM, Will Fitch <[email protected]> wrote:
>>>
>>>>
>>>> On Dec 6, 2011, at 8:58 AM, Rasmus Schultz wrote:
>>>>
>>>>> I agree with all of those points - the extra indentation looks messy,
>> and
>>>>> yes, type hints are important. It does fit better with PHP in general.
>>>>>
>>>>> It would be nice to also have support for automatic backing fields in
>>>>> addition though - so something simple like this:
>>>>>
>>>>> class BlogPost
>>>>> {
>>>>> private $_author;
>>>>>
>>>>> public get author()
>>>>> {
>>>>> return $this->_author;
>>>>> }
>>>>>
>>>>> public set author(Person $value)
>>>>> {
>>>>> $this->_author = $value;
>>>>> }
>>>>> }
>>>>
>>>> I don't like this approach. All efforts (which I'm currently part of)
>> to
>>>> implement type hinting return values will be compromised. If you want
>> to
>>>> implement accessors, keep them within a syntax that makes sense.
>>>> Personally, I support the C# style as much as possible. Methods are
>>>> already overused for purposes they shouldn't be, so if we're attempting
>> to
>>>> get around __set/get, let's not replace them with more method
>>>> implementations.
>>>>
>>>>
>>
>>
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php