While I understand your concern with set being the only keyword using (), and even agree it's a bit problematic, I see a big problem with using $value.
Even if $value internally makes sense due to something along the lines of * __setHours($value)* {} being equal to *set {}*, I think using $value without it ever being defined in the developer's code is not at all a good idea. If I see $value in the code, I'll logically look for where it was defined, and when I don't see it anywhere else in the code, things are going to very quickly get confusing. Our best option to combat this confusion is, in my eyes, putting a note in the documentation. That's not enough. A similar alternative to using $value that I'd argue would be much more sensible would be to, as Denis mentioned, use either a magic constant or a superglobal. As I mentioned previously, I would rather go with the set($value) {} syntax. Now, back to the part where I agree with you - the inconsistency wherein set has () that denote it is a method but get, isset, and unset do not. I see this inconsistency as something problematic enough to warrant a solution. We could go with the following: public $Hours { get() { ... } set($value) { ... } isset() { ... } unset() { ... } } Yes, we now have a little bit more meat on the syntax, but in this case, I don't think that it's all that bad. Here's two reasons why: 1) Adding parenthesis denotes that they are all functions - which they are! If anything, adding parenthesis to all of them makes the implementation * more* sensible. 2) It's *only* two more characters per function. On top of that, in my opinion, this syntax is not "ugly". In fact, as I just mentioned - this implementation is arguably *more* consistent with the rest of PHP. On Mon, Oct 8, 2012 at 6:10 PM, Clint Priest <cpri...@zerocue.com> wrote: > Seems a fair amount of people would like it with a definable parameter > name, though the original RFC I based mine off of is more than 4 years old > (mine is over a year old already). > > The $value is precisely chosen because it is exactly the way C# operates > and the original author thought to keep it the same as another well-known > language (why re-invent new syntax for no reason). > > That being said, javascript does indeed allow it, my concern then would be > would we have the parameterized syntax only for set() and not get, isset or > unset? > > If we do have them for all of them, it's a lot of extra characters with no > real need. > > I definitely favor set($value) over a magic $Hours for the $Hours > property, but I personally see no problem with the $value, it's not magic > it's a locally defined variable. > > Internally, this: > public $Hours { > get { ... } > set { ... } > } > > Is implemented as standard functions, while they are hidden through > reflection, these functions exist (as a result of the above example): > > public __getHours() { ... } > public __setHours($value) { ... } > > Lastly, with regards to JavaScript style getters/setters, I don't think > I've ever cared what the variable name was, I typically just do something > like: > > set blah(x) { ... } <-- x is fairly irrelevant and similarly the use of > $value is fairly irrelevant. Thoughts? > > > -----Original Message----- > > From: Jazzer Dane [mailto:tbprogram...@gmail.com] > > Sent: Monday, October 08, 2012 5:32 PM > > To: Benjamin Eberlei > > Cc: Aaron Holmes; internals@lists.php.net > > Subject: Re: [PHP-DEV] [RFC] Propety Accessors v1.1 > > > > I agree. > > It's more consistent than the $Hours solution and we don't have to add > another superglobal or magic constant, which is quite nice. The > > typehinting is a big plus as well. > > > > On Mon, Oct 8, 2012 at 3:26 PM, Benjamin Eberlei <kont...@beberlei.de > >wrote: > > > > > The set() one is really nice with the typehints. > > > > > > On Tue, Oct 9, 2012 at 12:19 AM, Aaron Holmes <aa...@aaronholmes.net> > > > wrote: > > > > > > > On 10/8/12 1:07 PM, Denis Portnov wrote: > > > > > > > >> 08.10.2012 15:52, Clint Priest пишет: > > > >> > > > >>> public $Hours { > > > >>> get { return $this->Seconds / 3600; } > > > >>> set { $this->Seconds = $value; } > > > >>> isset<http://www.php.net/isset**> { return isset< > > > >>> http://www.php.net/isset**>($this->Seconds); } > > > >>> unset<http://www.php.net/unset**> { unset< > > > >>> http://www.php.net/unset**>($this->Seconds); } > > > >>> } > > > >>> > > > >> > > > >> > > > >> Hi Clint, > > > >> > > > >> I've noticed some magic variable '$value' is introduced. And except > > > >> for superglobals I guess there is no such thing in PHP, so it looks > > > >> bit puzzling to me. I'd suggest on of the following: > > > >> > > > >> > > > >> - setter resambles setter method, wich also allows typehinting > > > >> public $Hours { > > > >> set ($value) { $this->Seconds = $value * 3600; } > > > >> } > > > >> > > > >> public $Hours { > > > >> set (DateTime $dateTime) { $this->Seconds = > > > >> $dateTime->getTimestamp(); } > > > >> } > > > >> > > > >> This seems like the cleanest method, in my opinion. Javascript > > > >> does > > > this > > > > for object prototypes: > > > > http://ejohn.org/blog/**javascript-getters-and-**setters/< > > > http://ejohn.org/blog/javascript-getters-and-setters/> > > > > > > > > > > > >> > > > >> What do you think? > > > >> > > > >> Thanks > > > >> Denis > > > >> > > > >> > > > > > > > > -- > > > > PHP Internals - PHP Runtime Development Mailing List To unsubscribe, > > > > visit: http://www.php.net/unsub.php > > > > > > > > > > > >