Why is that 1 too many, exactly?

Like I said, I would be ok with just having it behave as strong without the
distinction, though that might be a harder sell for some people.  On the
other hand, having it just behave as weak without the option to blow it up
would also be a harder sell for some people, myself included.  That's why,
from a pragmatic standpoint at least, having both levels makes the most
sense without really having any glaring drawbacks, aside from the fact that
some people might see it as superfluous.

--Kris


On Tue, Feb 28, 2012 at 3:41 PM, Michael Morris <dmgx.mich...@gmail.com>wrote:

> It's better to have it blow up in all cases then.  Avoiding the break is
> trivial
>
> int $a = (int) 3;
>
> And this example illustrates cleanly the difference between this
> proposal and casting by itself.  Introducing this creates a new level
> of typing, for a total of two.  Your proposal creates 3, which is 1
> too many.
>
> On Tue, Feb 28, 2012 at 6:36 PM, Kris Craig <kris.cr...@gmail.com> wrote:
> > But again, that same argument could be used to eliminate the require()
> > function, which is something that I and many other developers use quite
> > frequently.
> >
> > There are cases where I would want my script to blow-up and stop
> executing,
> > such as if an included script could not be loaded (hence "require"); or,
> > given the right circumstances, when my script is relying on a variable
> that,
> > as a result of some unanticipated behavior, receives an incompatible
> value
> > for its type.
> >
> > After all, just look at how many PHP scripts out there already do this
> > manually; i.e. terminating the script (with die() or some other means) if
> > the variable doesn't pass a bulky and convoluted sanity check.  All that
> > code could be eliminated by simply having the strong type, since that
> would
> > now be done for you at the lower level.  There are other cases where this
> > sort of conflict would be undesirable but the coder might still want the
> > script to proceed anyway, hence the need for the weak type.  There are
> > valid, real-world use cases for both.
> >
> > --Kris
> >
> >
> >
> > On Tue, Feb 28, 2012 at 3:30 PM, Michael Morris <dmgx.mich...@gmail.com>
> > wrote:
> >>
> >> I don't see a point in two error levels.  Either the coder cares or
> >> they don't. Further, there are mechanisms already in place.
> >>
> >> int $a = 'House'; // Warning.
> >> @ int $a = 'House'; // No warning because the suppression operator was
> >> used.
> >>
> >> If you need something more than a warning you can code it. Let's use a
> >> real world example
> >>
> >> @int $id = $_POST['id'];
> >>
> >> if ($id != $_POST['id']) {
> >>  throw MyValidationException();
> >> }
> >>
> >> In the language as it stands we have
> >>
> >> $id = (int) $_POST['id'];
> >>
> >> if ($id != $_POST['id']) {
> >>  throw MyValidationException();
> >> }
> >>
> >> So we have the means to make things secure.  The one thing, the only
> >> thing this is really going to give, is to prevent $a from changing
> >> type.
> >>
> >> To be honest, this isn't useful with solo programmers.  Where it will
> >> be useful is with teams and API enforcement.
> >>
> >> This whole strong/weak keywording is a Very Bad Idea(TM) IMHO.  Weak
> >> can already be done with casting.
> >>
> >> On Tue, Feb 28, 2012 at 6:17 PM, Kris Craig <kris.cr...@gmail.com>
> wrote:
> >> > +1 on that.
> >> >
> >> > However, I believe the coder should also have the option of
> determining
> >> > whether this should be recoverable or not, just like they have a
> choice
> >> > with
> >> > regard to using "include" or "require" (one fails gracefully, the
> other
> >> > terminates execution).
> >> >
> >> > That's where I think strong/weak could be very useful.  Here's how I
> >> > would
> >> > do it:
> >> >
> >> > weak int $a = "House"; // Throws E_WARNING
> >> > strong int $a = "House"; // Throws E_RECOVERABLE_ERROR
> >> >
> >> >
> >> > In both cases, the error can be caught, which would mirror the
> >> > flexibility
> >> > in languages like C#.  However, if the weak one isn't caught, the
> >> > warning is
> >> > thrown but the script proceeds as normal.  If the strong one isn't
> >> > caught,
> >> > the script will terminate as if it was an E_ERROR.
> >> >
> >> > I think this would be the most sensible approach in terms of balancing
> >> > simplicity and flexibility.
> >> >
> >> > --Kris
> >> >
> >> >
> >> >
> >> > On Tue, Feb 28, 2012 at 3:08 PM, Michael Morris <
> dmgx.mich...@gmail.com>
> >> > wrote:
> >> >>
> >> >> Agreed.  If conversion can occur without data loss (that is, if the
> >> >> value being assigned is == the value that actually IS assigned) then
> >> >> no error should occur.
> >> >>
> >> >> So
> >> >>
> >> >> int $a = "1"; // no error.  1 == "1" so who cares?
> >> >> int $a = 'House'; // error 0 != 'House', so this is a problem.
> >> >>
> >> >> Again, errors should only raise if the final value != source value.
> >> >>
> >> >> On Tue, Feb 28, 2012 at 6:03 PM, Rick WIdmer
> >> >> <vch...@developersdesk.com>
> >> >> wrote:
> >> >> > On 2/28/2012 2:58 PM, Kris Craig wrote:
> >> >> >
> >> >> >> strong int $a = "1"; // Converts to 1.  May or may not throw an
> >> >> >> error
> >> >> >> (I'm
> >> >> >> still on the fence).
> >> >> >
> >> >> >
> >> >> > It this is an error, it is no longer PHP.
> >> >> >
> >> >> >
> >> >> > --
> >> >> > PHP Internals - PHP Runtime Development Mailing List
> >> >> > To unsubscribe, visit: http://www.php.net/unsub.php
> >> >> >
> >> >>
> >> >> --
> >> >> PHP Internals - PHP Runtime Development Mailing List
> >> >> To unsubscribe, visit: http://www.php.net/unsub.php
> >> >>
> >> >
> >
> >
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>

Reply via email to