Steve:

Like your summary. Disagree with a few points but in general I agree
with you. More below.

> 2. C# has no issetter/unsetter.
>
> IMO customizing these functions is completely unneeded for the vast majority
> of use cases and could be replaced by simpler logic: isset($this->prop)
> calls the getter and compares to NULL; unset($this->prop) passes NULL to the
> setter.

Agreed, but if they are automatically generated then I see no harm in
allow custom `isset` and `unset` behavior as long as it doesn't get in
the way or complicate things.

> I think the path forward is to determine how we can serve the same goals as
> this RFC, but retain the conceptual simplicity of the C# implementation and
> maybe syntax that strays less from current PHP.
>
> I have some ideas that I could start forging into an RFC. Consider this:
>
> class Foo {
>   private $_bar;
>   public function get bar { return $this->_bar; }
>   public function set bar { $this->_bar = $value; }
> }
>
> Advantages I see over the RFC:
> * It's clearer that the accessors map to regular methods, and you know how
> to control visibility of methods and how they're inherited.
> * It's clearer $bar doesn't exist as a property, and it will never show up
> in state inspection.
> * You know $_bar is a plain PHP property, and you can initialize it directly
> in the constructor; we don't need an "initter".
> * There are no guards/proxies/shadow property to think about

Keyword 'function' is unnecessary and please don't use a magic
`$value`.  Just do a normal parenthesis:

    class Foo {
        private $_bar;
        public get bar() { return $this->_bar; }
        public set bar($value) { $this->_bar = $value; }
    }

This allows for a function-like feel and type-hints as well. Which
brings me to the shorthand notation:

> As for type-hinting, I think that could be achieved by a separate, simpler
> mechanism: type-hinting the properties.
>
> class Foo {
>   private Bar? $_bar;
> }

I like type-hinting properties as a shorter syntax, but now we have a
`private` method that has public getters/setters?  Seems odd at first.
In any case it is confusing.

I also don't like the `?` for `nullable`.  Just stick with PHP
convention and do:

    class Foo {
        public Bar $bar = NULL;
    }

Ralph:

>This is too similar to what we have today:
>
>class Foo {
>   private $_bar;
>   public function getBar() { return $this->_bar; }
>   public function setBar($value) { $this->_bar = $value; }
>
>}

Is there anything inherently *wrong* with that method? And the fact
that it is close is a GOOD indication, right? It's familiar and easy
to adopt. In fact, if we did accessors annotations style (which Python
has, so don't knock it blindly):

class Foo {
   private $bar;

   @bar.getter
   public function getBar() { return $this->bar; }

   @bar.setter
   public function setBar($value) { $this->bar = $value; }

}

Then I'd say that this is *perfect* style. All we add is some
annotations to allow it to be used in getter and setter syntax:

$foo = new Foo;
$foo->bar = 2; //Foo::setBar
$bar = $foo->bar;  //Foo::getBar

I can name my getters and setters however I want. Talk about about options!

Note: I'm not saying we should use annotations for this; I'm just
saying it makes certain cases nicer. I'm sure we can find drawbacks as
well. Discuss at will.

Clint:

I'm sorry that you spent all that time without hearing feedback from a
lot of the "No" voters.  Had they been participating all along perhaps
it could have been avoided. We'll never know.

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

Reply via email to