Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:63290 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 27527 invoked from network); 9 Oct 2012 03:08:50 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 9 Oct 2012 03:08:50 -0000 Authentication-Results: pb1.pair.com smtp.mail=tbprogrammer@gmail.com; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=tbprogrammer@gmail.com; sender-id=pass Received-SPF: pass (pb1.pair.com: domain gmail.com designates 209.85.214.170 as permitted sender) X-PHP-List-Original-Sender: tbprogrammer@gmail.com X-Host-Fingerprint: 209.85.214.170 mail-ob0-f170.google.com Received: from [209.85.214.170] ([209.85.214.170:42650] helo=mail-ob0-f170.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id F7/70-23861-F3593705 for ; Mon, 08 Oct 2012 23:08:48 -0400 Received: by mail-ob0-f170.google.com with SMTP id ni5so4696806obc.29 for ; Mon, 08 Oct 2012 20:08:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type; bh=Rh0DYSGwV0v4uHFOfh5I0eP5d3JZc/D243gS9HNKXtk=; b=MBSiCX73XT1t/5jMyLB9QccDUza68AftmbrHS89PZAdwGlgpj2HIW73A4une0wJBNC A9blYlkpApVkmAIJZSLwGxzZcdVs0H5N7xk+fCcT/0t7CfCFLa8YZcWOCgQaPRDwD8oN QUKmfBYXNDym/o6xOA/qZiYNTXMtRSLbmnkDTi2kNHuJIdYwu5SXs0mSUPQLplxS8xwg zpe78RqrkyAKP7Jl4C5pULLnZPjqYqasdONOlSpS+n6medtB9t+SLB6pHpwG2/j3pT5v hIurANk7AF+d53G4JwidrSD3IOOFRIXjXG0LQvCW67R7NABImrZxoOZcwT+ZZmOdk+cv ncqQ== Received: by 10.182.110.40 with SMTP id hx8mr1739143obb.47.1349752124976; Mon, 08 Oct 2012 20:08:44 -0700 (PDT) MIME-Version: 1.0 Received: by 10.76.11.170 with HTTP; Mon, 8 Oct 2012 20:08:24 -0700 (PDT) In-Reply-To: <9570D903A3BECE4092E924C2985CE485612B4353@MBX202.domain.local> References: <9570D903A3BECE4092E924C2985CE485612B3B48@MBX202.domain.local> <5073328D.5000002@gmail.com> <50735165.8010703@aaronholmes.net> <9570D903A3BECE4092E924C2985CE485612B4353@MBX202.domain.local> Date: Mon, 8 Oct 2012 20:08:24 -0700 Message-ID: To: Clint Priest Cc: "internals@lists.php.net" , Aaron Holmes , Benjamin Eberlei Content-Type: multipart/alternative; boundary=f46d044516ddf1ac1e04cb97a7f5 Subject: Re: [PHP-DEV] [RFC] Propety Accessors v1.1 From: tbprogrammer@gmail.com (Jazzer Dane) --f46d044516ddf1ac1e04cb97a7f5 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable 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 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 ol= d > (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 b= e > 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 n= o > 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:tbprogrammer@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 >wrote: > > > > > The set() one is really nice with the typehints. > > > > > > On Tue, Oct 9, 2012 at 12:19 AM, Aaron Holmes > > > wrote: > > > > > > > On 10/8/12 1:07 PM, Denis Portnov wrote: > > > > > > > >> 08.10.2012 15:52, Clint Priest =D0=BF=D0=B8=D1=88=D0=B5=D1=82: > > > >> > > > >>> public $Hours { > > > >>> get { return $this->Seconds / 3600; } > > > >>> set { $this->Seconds =3D $value; } > > > >>> isset { return isset< > > > >>> http://www.php.net/isset**>($this->Seconds); } > > > >>> unset { unset< > > > >>> http://www.php.net/unset**>($this->Seconds); } > > > >>> } > > > >>> > > > >> > > > >> > > > >> Hi Clint, > > > >> > > > >> I've noticed some magic variable '$value' is introduced. And excep= t > > > >> for superglobals I guess there is no such thing in PHP, so it look= s > > > >> 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 =3D $value * 3600; } > > > >> } > > > >> > > > >> public $Hours { > > > >> set (DateTime $dateTime) { $this->Seconds =3D > > > >> $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 > > > > > > > > > > > > --f46d044516ddf1ac1e04cb97a7f5--