RE: [PHP-DEV] [RFC] Propety Accessors v1.1
| From: | Clint Priest | Date: | Wed, 10 Oct 2012 13:57:58 +0000 |
| Subject: | RE: [PHP-DEV] [RFC] Propety Accessors v1.1 | ||
| References: | 1 2 3 4 5 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-63326@lists.php.net to get a copy of this message | ||
> On Wed, Oct 10, 2012 at 5:51 AM, Clint Priest <cpriest@zerocue.com> wrote:
> > I'm not even sure that automatic backing fields are even desired, I
> > never felt the need to have them in C# and the only reason they were
> > included is because they were a part of Dennis's original proposal.
> > Eliminating them would eliminate this as an issue.
>
> I just did a bit of research regarding this topic and I have found the following reasons why
> automatic properties exist in C#:
> 1. Changing a field to a property breaks the binary interface, so all code using the library
> has to be recompiled. If you are using an
> automatic property you can safely add additional behavior for it later.
> 2. Properties support data binding, whereas fields do not.
> 3. There are attributes that work for properties, but don't work for fields.
> 4. Reflection for fields and properties works differently, so changing a field to a property is
> a BC break.
>
> I guess that #1 is the most important one (you don't want to break the
> interface) and it obviously does not apply to PHP. Points #2 and #3 also don't apply as
> PHP has neither data binding not attributes. #4
> also doesn't seem to apply because ReflectionPropertyAccessor defines all the methods that
> ReflectionProperty defines, so
> changing
> field->property should be okay there too.
>
> From that I would conclude that the automatic properties are really not needed in PHP. I think
> they will only cause confusion as to
> when one should use
public $name; and when one should use
> public $name { get; set; };.
>
> The only thing I'm not sure about is how read-only / write-only properties rely on
> automatic properties with your current
> implementation. If the automatic properties aren't needed there either, then I think they
> can be safely removed.
Nice, I would agree that we should eliminate the automatic get/set since the reason they exist in C#
is not an issue in PHP and it has only served to confuse everyone.
With the read-only and write-only, they are separate from automatic getters/setters really. If you
define a read-only with {get;} it's the same as any other getter.