2013/6/26 Robert Stoll <rst...@tutteli.ch>

> 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 = new MoneyValue();
> $price := 29.99;
>
> Instead of writing something like:
> $price = 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 = new MoneyValue(29.99);
>

You forgot the currency ;) (without it a "money"-type is useless). But this
leads to

$price := 29.99;
$price := 'USD';

I find it confusing.


>
> -----Ursprüngliche Nachricht-----
> Von: Richard Quadling [mailto:rquadl...@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 <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
>
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>


-- 
github.com/KingCrunch

Reply via email to