Re: [RFC] Accessors : read-only / write-only keywords

From: Date: Sat, 20 Oct 2012 17:20:50 +0000
Subject: Re: [RFC] Accessors : read-only / write-only keywords
Groups: php.internals 
Request: Send a blank email to internals+get-63568@lists.php.net to get a copy of this message
Hey Rasmus, please try and keep these replies in the appropriate thread... I am in favor of eliminating the read-only/write-only keywords and implementing no "special code" to make what was read-only/write-only language enforced. I think the alternatives with final are just fine and good enough and will let userland programming enforce it if they so desire. Example of user-land enforced 'read-only' code: class A { public $b { get() { ... } private final set($x) { throw new Exception("cannot set $b"); } } } This solution introduces no magic on the engine side and lets those who need a read-only / write-only type scenario to "work." Does this sound like an effective solution for everyone? > -----Original Message----- > From: Rasmus Schultz [mailto:rasmus@mindplay.dk] > Sent: Saturday, October 20, 2012 9:45 AM > To: internals@lists.php.net > Subject: [PHP-DEV] Re: internals Digest 20 Oct 2012 09:49:39 -0000 Issue 2820 > > I second getting rid of write-onle - the only real case I can think of, is something like a > password property on a user/account model- > type, which gets encrypted and thus can't be read, and as Amaury pointed out, that should > be a setPassword() method instead, > perhaps even a separate UserPasswordService component. Certainly not an accessor. > > As for read-only, I strongly advice against overloading the const keyword with an entirely new > meaning, if that's what you're > suggesting? > > Just drop the idea of read-only altogether, please - it's so marginally useful in the > first place, unconventional compared to other > languages, and will just get in the way. For most properties that only have a read-accessor, it > won't even make any sense for someone > to try to extend that with a write-accessor. And as said, if you want to keep the internal > value safe from write, just declare the actual > property as private. > > ---------- Forwarded message ---------- > From: Amaury Bouchard <amaury@amaury.net> > To: Clint Priest <cpriest@zerocue.com> > Cc: "internals@lists.php.net" <internals@lists.php.net> > Date: Sat, 20 Oct 2012 10:09:35 +0200 > Subject: Re: [PHP-DEV] [RFC] Accessors v1.1 -> v1.2 Summary read-only / write-only keywords > > "no equivalent replacement has been suggested" => ouch > > read-only => const > > write-only => shouldn't exists. A write-only accessor is just a method disguised in > property. > > It's not a good idea to allow: > $obj->prop = 3; > when the meaning is: > $obj->meth(3);

« previous php.internals (#63568) next »