Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:67866 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 21127 invoked from network); 26 Jun 2013 13:30:30 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 26 Jun 2013 13:30:30 -0000 Authentication-Results: pb1.pair.com smtp.mail=krebs.seb@gmail.com; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=krebs.seb@gmail.com; sender-id=pass Received-SPF: pass (pb1.pair.com: domain gmail.com designates 74.125.82.178 as permitted sender) X-PHP-List-Original-Sender: krebs.seb@gmail.com X-Host-Fingerprint: 74.125.82.178 mail-we0-f178.google.com Received: from [74.125.82.178] ([74.125.82.178:63278] helo=mail-we0-f178.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id FA/27-18025-4FCEAC15 for ; Wed, 26 Jun 2013 09:30:29 -0400 Received: by mail-we0-f178.google.com with SMTP id u53so10409412wes.9 for ; Wed, 26 Jun 2013 06:30:26 -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=Ss8bXmEWuOiDEzWLCao/uI2sZ37S/dAxbcIsuF8hyhs=; b=pct2PpAN8s92jy1VOmx5QrS4mHP/IblovfGyMZH/LEXzcjc3n+0iaMGv6d7pvG5A8F u7pMP6mD4DUjygk49wwUdCMtD4b89wb7y3s7ve5zcnjsYTMM03JRBqQpKe7dc+kcw35B l+4q7dBUaEDwhSbglyZ99lH8USLBMSC7/8Vb5JDA5loUmGA7RuxMxStU6coLJ8Sj4GL8 MOX7adJmq/s/JXTFo23XIB2BOH9Krysnuf9umDGa9OYDRPx5J0W6ScREapgo9ZTBTUIp /XG90G/93hyKe/l/kqawEkruRsjjeKAAia7ZMO4P/QArAR8Zi/VrOIXuxLzXphCfAgca 1arw== X-Received: by 10.180.74.146 with SMTP id t18mr1042729wiv.3.1372253426414; Wed, 26 Jun 2013 06:30:26 -0700 (PDT) MIME-Version: 1.0 Received: by 10.216.176.6 with HTTP; Wed, 26 Jun 2013 06:29:46 -0700 (PDT) In-Reply-To: <001b01ce7263$da79fec0$8f6dfc40$@tutteli.ch> References: <001b01ce7263$da79fec0$8f6dfc40$@tutteli.ch> Date: Wed, 26 Jun 2013 15:29:46 +0200 Message-ID: To: Robert Stoll Cc: Richard Quadling , Tom Oram , PHP internals Content-Type: multipart/alternative; boundary=f46d043c7f6a06066e04e00ea679 Subject: Re: [PHP-DEV] RFC Proposal: New assign value operator From: krebs.seb@gmail.com (Sebastian Krebs) --f46d043c7f6a06066e04e00ea679 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable 2013/6/26 Robert Stoll > As far as I see it, it is kind of an operator overload mechanism for the > assign operator. > This can be useful for small utility classes such as Money, Email etc. > > An example was given: > $price =3D new MoneyValue(); > $price :=3D 29.99; > > Instead of writing something like: > $price =3D new MoneyValue(); > $price->setPrice(29.99); > > The benefit is small, but can lead to better readable code. But since it > is only for the assign operator and not for + - etc., for me the question > remains open why not writing something like this directly: > > $price =3D new MoneyValue(29.99); > You forgot the currency ;) (without it a "money"-type is useless). But this leads to $price :=3D 29.99; $price :=3D 'USD'; I find it confusing. > > -----Urspr=FCngliche Nachricht----- > Von: Richard Quadling [mailto:rquadling@gmail.com] > Gesendet: Mittwoch, 26. Juni 2013 12:51 > An: Tom Oram > Cc: PHP internals > Betreff: Re: [PHP-DEV] RFC Proposal: New assign value operator > > On 25 June 2013 11:01, Tom Oram wrote: > > > Hi everyone, > > > > I've got an idea for an RFC proposal and from reading the instructions > > it looks like I should run it past you guys first. > > > > I have not made any contributions to PHP before although I have made > > some custom modifications in house in the past and while I'm no longer > > familiar with the PHP code base I am confident I have the skills to > > implement this should it be accepted. > > > > What I want to propose is a new assignment operator which rather than > > setting the variable to completely new value it would update the value > > while maintaining the type. > > > > The main motivation for this is for easy assignment to value objects > > aka assignment operator overloading via a magic method (prehaps called > > __assign). > > > > Here is an example ( for now I will use the PASCAL style assignment > > operator :=3D as the new operator as it is a know assignment operator > > and currently not used in PHP): > > > > // For a class defined like so... > > class MoneyValue > > { > > protected $amount; > > > > public function __assign($value) > > { > > $this->amount =3D $value; > > } > > } > > > > // The amount could then be assigned using the new operator like this > > > > $price =3D new MoneyValue(); > > > > $price :=3D 29.99; > > > > While the primary focus would be for assignment operator overloading > > as I just displayed in the previous example, for consistency it could > > be used with scalar values to preserve type like so: > > > > // $str is now a string > > > > $str =3D 'Original String'; > > > > // Using the new assignment variable would cast the value being > > assigned to the variable's type // (in this case a string). So > > > > $str :=3D 7; > > > > // Would be the equivalent to > > // > > // $str =3D (string) 7; > > // > > // $str =3D=3D=3D "7" > > > > > > Another quick example: > > > > $num =3D 5; > > > > $num :=3D '12'; > > > > // Equivalent to > > // > > // $num =3D (int) '12'; > > // > > // $num =3D=3D=3D 12; > > > > So what do you guys think? > > > > If I get a good response I'll look into how to create a proper RFC and > > start trying to work out how to implement it. > > > > Many thanks and look forward to some responses, Tom > > > > Hi. > > I'm not going to comment on the merits as such, but I'd be interested in > knowing what problem this RFC would solve? > > Considering PHP has type juggling scalars, it would SEEM (I may have > missed the point) that this could result in data loss when the enforced > conversion results in 0/False/"". > > $num =3D 8; > $num :=3D "data from user"; // 0 > > Unless that is the expected behaviour. > > Where would this RFC change be used? > > And having said all of that, I'm not against it, just want to see what it > would be useful for that isn't already part of PHP's toolbox. > > -- > Richard Quadling > Twitter : @RQuadling > EE : http://e-e.com/M_248814.html > Zend : http://bit.ly/9O8vFY > > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php > > --=20 github.com/KingCrunch --f46d043c7f6a06066e04e00ea679--