Hi Richard, Thanks for your reply, the main reason would be operator overloading rather than the typecasting example, the typecasting version is more for consistency. I am also fairly that there might be situations where it would be useful to set the value of a scalar while preserving the time and save the need for checking the type first, however I do admit I can't think of a concrete example.
The main thing I was thinking is I often find myself writing things like: $obj->set(2); $obj->setValue(5); $obj->setX(4); Where the object only really represent a single value, examples are things like EmailAddress class, ZipCode class, MoneyValue class, etc. Everytime I write something like one of the examples above I wish I could simply write: $email = 't...@scl.co.uk'; and continue to use my EmailAddress class, however since PHP is loosely type this replaces the object with a string, hence my suggesting for new operator. All the best, Tom On 26 June 2013 11:51, Richard Quadling <rquadl...@gmail.com> wrote: > > > > On 25 June 2013 11:01, Tom Oram <t...@scl.co.uk> 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 := 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 = $value; >> } >> } >> >> // The amount could then be assigned using the new operator like this >> >> $price = new MoneyValue(); >> >> $price := 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 = '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 := 7; >> >> // Would be the equivalent to >> // >> // $str = (string) 7; >> // >> // $str === "7" >> >> >> Another quick example: >> >> $num = 5; >> >> $num := '12'; >> >> // Equivalent to >> // >> // $num = (int) '12'; >> // >> // $num === 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 = 8; > $num := "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 > -- **************************************************** PLEASE NOTE: For support requests please use supp...@scl.co.uk instead of emailing staff directly, this way your request is likely to be dealt with more efficiently. **************************************************** Tom Oram - SCL Internet Services PO Box 8, Cardigan, Ceredigion, SA41 3YA Website: http://www.scl.co.uk/ Tel: +44 (0) 1239 622 411 Fax: +44 (0) 1239 622428 Company Reg. No. 2441708 ****************************************************